从Mainwindow关闭QDialog

时间:2016-05-27 15:02:30

标签: c++ qt

当我按下按钮时,我有一个Mainwindow创建一个QDialog(它的名字是qds)。 当我关闭Mainwindow时,我希望QDialog也关闭。但是,当我关闭Mainwindow时,QDialog仍处于打开状态,应用程序仍在运行。 这是主窗口的析构函数:

MainWindow::~MainWindow(){
    if(qds) delete qds; // this is the QDialog
    // ...other code
}

qds不是主窗口的孩子。 我试着把

setAttribute(Qt::WA_DeleteOnClose);

在mainwindow的构造函数中,但它会生成分段faul(double free)。

1 个答案:

答案 0 :(得分:3)

  

启动非模态对话框,指针位于主窗口中   宾语。它会阻止应用程序在关闭主窗口时退出。如何解决?

应用程序事件循环中不应该有更多对象“旋转”并解决问题。我调用所有没有其他小部件的小部件'this'指针通过构造函数'detached'传递。但我们仍然可以跟踪它们。我使用'分离'小部件列表,但只有一个'分离'对话框,类成员变量指针就足够了。

void MainWindow::closeEvent(QCloseEvent *event)
{
   // TODO: also make sure m_pDetachedNonmodalDlg set to null
   //       when the dialog closed on its own and deleted: see
   //       QObject::destroyed() signal for that or make it like
   //       QPointer<QWidget> m_pDetachedWidget
   if (m_pDetachedNonmodalDlg)
      m_pDetachedNonmodalDlg->close();

   // or event->accept(); but fine 'moments' are there
   QMainWindow::closeEvent(event);
}