需求

需要在 QDialog 关闭的时候,自动释放掉资源。

解决

默认情况下, QDialog 占用的内存会在 MainWindow 关闭后释放,如果想要在 QDialog 本身关闭的时候就释放,需要通过 setAttribute 方法配置 Qt::WA_DeleteOnClose 选项.

CurrentGetConfigForm * current_get_config_form = nullptr;
void MainWindow::on_pushButton_current_get_config_clicked()
{
    if (!GetConfig())
      return;

    if (current_get_config_form == nullptr)
      current_get_config_form = new CurrentGetConfigForm(nullptr, port_, version_, address_);

    current_get_config_form->setAttribute(Qt::WA_ShowModal, true);
    current_get_config_form->setAttribute(Qt::WA_DeleteOnClose, true);
    current_get_config_form->show();
    //QEventLoop loop;
    //loop.exec();
    qDebug() << "MainWindow::on_pushButton_current_get_config_clicked() end" << Qt::endl;
    current_get_config_form = nullptr;
}

参考

Qt Dialog 内存管理问题:Dialog关闭时会自己释放自己吗?