Qt 打开窗体时如何回收窗体资源

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();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值