QPointer和删除对象

时间:2010-03-03 13:47:23

标签: qt qdialog qpointer

我有一个Qt应用程序,它使用QPointers来显示新的UI对话框(Widgets)。主应用程序可以有许多相同的小部件加载不同的数据。我遇到的问题是删除和释放每个小部件的内存。如果我监视程序的RAM使用情况,每次单击按钮打开其中一个新窗口小部件时,它会增加内存,当我关闭窗口小部件时,它似乎不会释放内存。我已尝试使用deleteLater和其他解决方案,但不断在程序中崩溃。

这里有一些示例代码:

QPointer<ListReservations> listResWindow = new ListReservations(resID);
listResWindow->setNum(numpeople);
listResWindow->show();

这将调用“ListReservations”小部件,该小部件被声明为QDialog(非模态)。在那个对话框中,我有一个按钮来关闭调用QWidget::close()插槽的窗口。

我想问题是我的主程序(有QPointer)如何知道对话框何时关闭然后释放对话框并(如果可能)删除指针以节省更多内存...

我以为你可以对QConnect()对象做QPointer,但我似乎无法找到任何允许传递指针的信号或插槽,更不用说发送了对话框确实关闭并准备删除后的信号。

也许我需要在主程序中使用某种函数来获取通用指针对象,然后在调用它自己的关闭插槽之前调用QDialog?在那个功能中,它会通过自身被摧毁?只是抛弃我试图实现但在......失败的想法。

我认为我不能在其他地方重复使用相同的指针,因为理论上你可以同时打开多个ListReservations窗口。

1 个答案:

答案 0 :(得分:3)

确保使用Qt::WA_DeleteOnClose在对话框中设置QWidget::setAttribute()属性标记。这应该确保对话框在关闭时被正确销毁。有关详细信息,请参阅Qt documentation

假设现在可以正确释放内存,指针应该从Qt documentation

自身失效
  

守卫指针,QPointer,   表现得像普通的C ++指针T *,   除了它被自动设置为   引用的对象为0时为0   被破坏(与普通的C ++指针不同,   它成为“悬空指针”   这种情况)