QT新开窗口后如何回收资源
1.QWidget 设置属性,关闭时回收,本质还是在closeEvent中实现,可适用于不需要处理回调函数的状态
QWidget *win = new Qwidget(this);//建立在堆上
win->setAttribute(Qt::WA_DeleteOnClose);//关闭时回收内存
//Qt::WA_DeleteOnClose 55
//Makes Qt delete this widget when the widget has accepted the close event (see QWidget::closeEvent()).
2.QWidget重载closeEvent(),发送CloseWindow信号,捕获参数
#include <QWidget>
#include <QCloseEvent>
class frmWidget : public QWidget
{
Q_OBJECT
public:
explicit frmMotorMsg(QWidget *parent = nullptr,int type = 0,quint32* value = nullptr);
~frmMotorMsg();
protected:
virtual void closeEvent(QCloseEvent *event) override;
signals:
void closeWindow();//当前窗口关闭时发送信号
}
void frmSelfTestConfig::closeEvent(QCloseEvent *event)
{
emit closeWindow();
event->accept();
}
//调用新的窗口
{
frmWidget* win = new frmWidget(nullptr);//设置this,由父窗口负责回收,但窗体显示时会显示在当前界面,选择nullptr则需要自己回收内存资源
connect(win,&frmWidget::closeWindow,[=](){
win->deleteLater();//在a.exce()下一个事件循环回收内存,不能使用delete win; 因为此时在closeEvent()虚函数中,不能回收资源,否则函数指针会变为野指针
//doSomething()
//list 移除对象
});
win->show();
}