gpt4 book ai didi

c++ - 从主窗口关闭 QDialog

转载 作者:行者123 更新时间:2023-11-28 00:03:02 25 4
gpt4 key购买 nike

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

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

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

setAttribute(Qt::WA_DeleteOnClose);

在主窗口的构造函数中,但它会生成段错误(double free)。

最佳答案

The non-modal dialog is launched and the pointer is in main window object. It prevents the app from quitting while closing the main window. How to fix that?

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

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);
}

关于c++ - 从主窗口关闭 QDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com