3

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

一些示例代码在这里:

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

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

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

我认为您可能可以QConnect()QPointer对象执行操作,但我似乎找不到任何允许指针传递的信号或插槽,更不用说在对话框确实关闭并准备好删除时发送信号了。

也许我需要在主程序中使用某种函数,它需要一个通用指针对象,然后QDialog在调用它自己的关闭槽之前调用它?在那个函数中,它会通过自身被销毁吗?只是抛出我试图实施但失败的想法......

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

4

1 回答 1

3

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

假设内存现在已正确释放,则指针应使自身失效,来自Qt 文档

受保护的指针 QPointer 的行为类似于普通的 C++ 指针 T *,不同之处在于它在被引用的对象被销毁时自动设置为 0(与普通的 C++ 指针不同,在这种情况下会变成“悬空指针”)

于 2010-03-03T16:34:40.833 回答