当我按下按钮时,我有一个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)。
答案 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);
}