gpt4 book ai didi

qt - QPointer 和删除对象

转载 作者:行者123 更新时间:2023-12-04 17:52:50 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com