我有一个 Qt 应用程序,它使用 QPointers
来显示新的 UI 对话框(小部件)。主应用程序可以有许多加载不同数据的相同小部件。我遇到的问题是删除和释放每个小部件的内存。如果我监视程序的 RAM 使用情况,每次单击按钮打开这些新小部件之一时,它都会增加 ram,而当我关闭小部件时,它似乎并没有释放 ram。我试过使用 deleteLater
和其他解决方案,但程序总是崩溃。
一些示例代码在这里:
QPointer<ListReservations> listResWindow = new ListReservations(resID);
listResWindow->setNum(numpeople);
listResWindow->show();
这将调用声明为 QDialog
(非模态)的“ListReservations
”小部件。在那个对话框中,我有一个按钮来关闭调用 QWidget::close()
槽的窗口。
我想问题是我的主程序(具有QPointer
)如何知道对话框何时关闭然后释放对话框并(如果可能)删除指针以节省更多内存...
我认为您可以对 QPointer
对象执行 QConnect()
,但我似乎找不到任何允许指针的传递,更不用说在对话框确实关闭并准备好删除后发送信号了。
也许我需要在主程序中使用某种函数来获取通用指针对象,然后让 QDialog
在调用它自己的关闭槽之前调用它?在那个函数中它会通过自己被销毁?只是抛出我尝试实现但失败的想法......
我不认为我可以在别处重用相同的指针,因为理论上您可以同时打开多个 ListReservations
窗口。
最佳答案
确保使用 QWidget::setAttribute()
在对话框中设置了 Qt::WA_DeleteOnClose
属性标志。这应该确保对话框在关闭时被正确销毁。查看Qt documentation了解更多详情。
假设内存现在已正确释放,指针应该会自行失效,从 Qt documentation :
A guarded pointer, QPointer, behaves like a normal C++ pointer T *, except that it is automatically set to 0 when the referenced object is destroyed (unlike normal C++ pointers, which become "dangling pointers" in such cases)
关于qt - QPointer 和删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371750/