我在QMainWindow::setMenuBar(QMenuBar * menuBar)
:
注意:QMainWindow取得menuBar指针的所有权并在适当的时候删除它。
示例代码(在派生自QMainWindow
的类的方法中):
QMenuBar * menuBar = new QMenuBar(this);
setMenuBar(menuBar) // <-- immediately transfer ownership
// use menuBar pointer to add actions, menus, and what not
拨打QMenuBar
后,我仍然可以依赖指向setMenuBar
的本地指针吗?我的意思是,它完全有保障吗?
当我删除QMainWindow
派生类时,QMenuBar
对象也会被删除,因为QMainWindow
在构造它时被设置为其父级 - 但后面的“所有权”中有什么政策接管“通过setMenuBar
除了参考/指针的副本?
答案 0 :(得分:1)
是的,只要拥有所有权的对象存活,就可以安全地使用该指针。
QMainWindow
取得菜单所有权的事实意味着它将在不再需要时将其删除。这在Qt中很常见,请参阅Object Trees & Ownership文档。
话虽这么说,您的示例代码可以像这样重写:
QMenuBar *menu = menuBar();
如有必要,这将create an empty menu,因此您无需担心所有权的转移。只要您需要在Windows的菜单栏上操作,就可以调用该成员函数。