【发布时间】:2010-03-03 13:47:23
【问题描述】:
我有一个 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 窗口。
【问题讨论】: