Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从主窗口关闭QDialog_C++_Qt - Fatal编程技术网

C++ 从主窗口关闭QDialog

C++ 从主窗口关闭QDialog,c++,qt,C++,Qt,我有一个主窗口,当我按下按钮时,它会创建一个QDialog(它的名字是qds)。 当我关闭主窗口时,我希望QDialog也关闭。但是,当我关闭主窗口时,QDialog仍处于打开状态,应用程序仍在运行。 这是主窗口的析构函数: MainWindow::~MainWindow(){ if(qds) delete qds; // this is the QDialog // ...other code } qds不是mainwindow的孩子。 我试着把 setAttribute(Q

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

MainWindow::~MainWindow(){
    if(qds) delete qds; // this is the QDialog
    // ...other code
}
qds不是mainwindow的孩子。 我试着把

setAttribute(Qt::WA_DeleteOnClose);
在主窗口的构造函数中,但它会生成分段faul(双自由)

此时将启动非模态对话框,指针位于主窗口中 对象它防止应用程序在关闭主窗口时退出。如何解决这个问题

应用程序事件循环中不应该有更多的对象“旋转”,这就解决了问题。我将所有没有通过构造函数传递另一个小部件“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);
}
void主窗口::closeEvent(QCloseEvent*event)
{
//TODO:还要确保m_pDetachedNonmodalDlg设置为null
//对话框自行关闭并删除时:请参见
//QObject::destroyed()信号,或者
//QPointer m_pDetachedWidget
如果(m_pDetachedNonmodalDlg)
m_pDetachedNonmodalDlg->close();
//或者事件->接受();但美好的“时刻”就在那里
QMainWindow::closeEvent(事件);
}
此时将启动非模态对话框,指针位于主窗口中 对象它防止应用程序在关闭主窗口时退出。如何解决这个问题

应用程序事件循环中不应该有更多的对象“旋转”,这就解决了问题。我将所有没有通过构造函数传递另一个小部件“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);
}
void主窗口::closeEvent(QCloseEvent*event)
{
//TODO:还要确保m_pDetachedNonmodalDlg设置为null
//对话框自行关闭并删除时:请参见
//QObject::destroyed()信号,或者
//QPointer m_pDetachedWidget
如果(m_pDetachedNonmodalDlg)
m_pDetachedNonmodalDlg->close();
//或者事件->接受();但美好的“时刻”就在那里
QMainWindow::closeEvent(事件);
}

您是否删除了
删除QDsetAttribute(Qt::WA_DeleteOnClose)中的code>
case?@LogicStuff是的,但它是相同的。请展示您如何创建对话框的代码?@demonplus这是整个qdialog\u搜索类。您是否检查了~MainWindow()是否实际被调用?您是否删除了
delete qdssetAttribute(Qt::WA_DeleteOnClose)中的code>
case?@LogicStuff是的,但它是相同的。请展示您如何创建对话框的代码?@demonplus这是整个qdialog\u搜索类。您是否检查了~MainWindow()是否实际被调用?