我已经有了一夸脱的应用程序,使用QPointers带来了新的用户界面的对话(部件).主要应用程序可以有许多相同的部件载有不同的数据。这问题我有的是在删除,释放内存每个小部件。如果我监测RAM使用的程序,每次我按一下按钮打开这个新的部件,它增加了ram当我靠近的部件,它似乎并没有被释放。我已经试过使用 deleteLater 和其他的解决方案,但继续得到崩溃的程序。

一些例子码是:

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

这叫"ListReservations"的部件,其中宣布为一个 QDialog (不模式).在该对话然后,我有一个按钮来接近的窗口中的电话的 QWidget::close() 隙。

我猜测的问题是如何我主要的节目(已 QPointer)当知道的对话是关闭的,然后免费的对话以及(如果可能的话)删除指针,以节省更多的记忆...

我想你可能要做一个 QConnect() 来的 QPointer 对象,但我似乎找不到任何信号或槽,将允许通过的指针,少得多,发送的信号,一旦该对话是实际上关闭,并准备为删除。

也许我需要某种形式的功能是在主要程序,需要一个通用的指针的对象,然后有QDialog呼叫,呼叫前它自己的紧隙?在这一职能将通过本身被摧毁?只是扔出的想法,我已经试图执行而失败。

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

有帮助吗?

解决方案

确保你设置的 Qt::WA_DeleteOnClose 属性的标志在你的对话, QWidget::setAttribute().这应该确保该对话被正确地销毁在它关闭。看看 夸脱的文件 更多的细节。

假设存储器,现在正释放,指针应该无效本身,从 夸脱的文件:

一个有人看守的指针,QPointer, 就像一个正常C++指T*, 除了它是会自动设定为 0时引用的对象是 破坏(不同于一般C++指针, 其成为"晃来晃去的指针"在 这种情况下)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top