C++ 从主窗口关闭QDialog
我有一个主窗口,当我按下按钮时,它会创建一个QDialog(它的名字是qds)。 当我关闭主窗口时,我希望QDialog也关闭。但是,当我关闭主窗口时,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
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()是否实际被调用?