QAction的所有权

5
当将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 菜单示例 没有删除它创建的任何操作,因此我认为 QMenu 对 QAction 进行了所有权管理。这是否正确?

1个回答

5
如果您将一个已存在的操作添加到QWidget(QMenu是QWidget的一种),则:
引用: 操作的所有权不会转移到此QWidget。
请注意,在您的示例中,删除a由MyClass处理,因为您已将其用作父QObject,因此a在QObject的析构函数中被删除。

谢谢。关于“a”的销毁,你的回答有歧义。QObject会为我做这件事吗?还是我必须在MyClass中明确地进行销毁? - glennr
1
每个 QObject 维护一个它是“父级”的 QObject 列表,当 QObject 被销毁时,它的“子对象”也会被删除。因此,除了将您的 QObject 传递给继承自 QObject 的对象的 parent 参数之外,您不需要做任何事情。阅读 QObject 文档,它会比这个简短的描述更好地解释它。 - cmannett85

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接