QMainWindow和所有权收购政策

时间:2013-05-09 14:48:07

标签: qt

我在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除了参考/指针的副本?

1 个答案:

答案 0 :(得分:1)

是的,只要拥有所有权的对象存活,就可以安全地使用该指针。

QMainWindow取得菜单所有权的事实意味着它将在不再需要时将其删除。这在Qt中很常见,请参阅Object Trees & Ownership文档。

话虽这么说,您的示例代码可以像这样重写:

QMenuBar *menu = menuBar();

如有必要,这将create an empty menu,因此您无需担心所有权的转移。只要您需要在Windows的菜单栏上操作,就可以调用该成员函数。