【问题标题】:Ownership of QActionQAction 的所有权
【发布时间】:2012-02-03 18:31:26
【问题描述】:

向负责删除 QAction* 对象的 QMenu 添加 QAction* 时?我在 QMenu 或 QAction 的文档中找不到它。

void MyClass::contextMenuEvent(QContextMenuEvent *evt)
{
    QMenu menu(this);
    QAction *a = new QAction(tr("Some action"), this);
    menu.addAction(a); // who owns a?
    menu.exec(evt->globalPos());
}

Qt Menus example 不会删除它创建的任何操作,因此我假设 QMenu 拥有 QAction。对吗?

【问题讨论】:

    标签: qt qmenu ownership-semantics


    【解决方案1】:

    如果您将预先存在的操作添加到 QWidgetQMenu 是),那么:

    action的所有权不会转移到这个QWidget。

    请注意,在您的示例中,MyClass 的删除由MyClass 处理,因为您已将其用作父级QObject,因此aQObject 的析构函数中被删除。

    【讨论】:

    • 谢谢。关于“a”的破坏,您的回答模棱两可。 QObject 会为我做,还是我必须在 MyClass 的某个地方明确地做?
    • 每个 QObject 维护一个 QObject 列表,它是它的“父”,当 QObject 被销毁时,它的“子”也被删除。所以不,除了将 QObject 传递给 QObject 派生对象的父 arg 之外,您不需要做任何事情。阅读 QObject 上的文档,它会比那个努力更好地解释它......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 2022-10-18
    • 2021-11-22
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多