2012-01-05 77 views
5

向负责删除QAction *对象的QMenu添加QAction *时?我无法在QMenu或QAction的文档中找到它。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的所有权。那是对的吗?

回答

5

如果添加预先存在的行动,一个QWidget(这QMenu是),则:

行动的所有权不转移到这个QWidget的。

注意,在你的例子中,a删除由MyClass处理,因为你已经把它作为一个父QObject,所以aQObject的析构函数删除。

+0

谢谢。你的回答在“a”的销毁方面含糊不清。 QObject会为我做,还是必须在MyClass的某个地方显式执行? – glennr 2012-01-06 00:22:00

+0

每个QObject都维护一个QObject对象的列表,当QObject被销毁时,'children'也被删除。所以不,除了将你的QObject传递给QObject派生对象的父arg外,你不需要任何东西。阅读关于QObject的文档,它会比那个努力更好地解释它... – cmannett85 2012-01-06 00:27:02