在 Qt 中关闭新的非子窗口

Posted

技术标签:

【中文标题】在 Qt 中关闭新的非子窗口【英文标题】:Closing new nonchild window in Qt 【发布时间】:2009-06-20 09:23:28 【问题描述】:

我正在尝试制作 2 个窗口。 2nd 应该在 1st 中调用。我不连接他们的孩子->父母。 但是当我调用第二个窗口并关闭它时,第一个窗口也关闭了。我该怎么办? 两个窗口都继承自 QWidget。 C++和Qt


对不起,我描述得很差。 我有一个主窗口。类继承自 QMainWindow。我创建了第二个窗口。类继承自 QWidget。 在第一个(主窗口)中,我正在创建并调用第二个窗口

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

没有给父母的链接。一切正常,但是当我关闭第二个窗口(配置窗口)时,我的主窗口也正在关闭。我不需要这个。配置窗口关闭后我应该怎么做才能阻止关闭主窗口。

希望描述得好一点。

我的第一个窗口有这个标志:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

没有他们一切都很好。如果我需要窗口中的标志,我可以改变一些东西吗?

【问题讨论】:

恐怕我无法仅凭此信息提出任何建议。您可以编辑问题以发布更多信息吗?理想情况下,一个简短的代码示例显示您对两个窗口的操作以及您的 main() 函数。 第二条评论。这个问题写得不好,例如当你说“我调用了第二个窗口”时,你到底在做什么? 【参考方案1】:

你需要这样的东西:

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

这里是测试程序:http://pastebin.com/f5903c5f4。

注意,现在您需要在主窗口的析构函数中显式调用quit()。

如果你阅读QApplication::quitOnLastWindowClosed documentation,你会发现:

如果该属性为真,当最后一个可见的主窗口(即没有父窗口的窗口)具有 Qt::WA_QuitOnClose 属性集关闭时,应用程序将退出。默认情况下,除子窗口外的所有小部件都设置此属性

因为您的主窗口是一个(无框)工具窗口,所以它很重要。这使得 ConfWindow 成为唯一的非子窗口***小部件。因此,如果您关闭 ConfWindow,它会促使应用程序实例退出。

【讨论】:

【参考方案2】:

如果这是代码,那么 Qt 中有一个巨大的错误。 上面的代码不应该关闭你的第一个 Windows,肯定有其他问题。 应用程序是关闭还是崩溃?

备注 谁在删除 configWindow?有一个Qt::WA_DeleteOnClose属性可以在窗口关闭后将其删除。

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();

【讨论】:

应用程序是关闭还是崩溃? 还有其他问题,我们需要更多信息(代码)。

以上是关于在 Qt 中关闭新的非子窗口的主要内容,如果未能解决你的问题,请参考以下文章

在QT中关闭窗口之前获取应用程序退出信号

C#中关闭子窗口的同时刷新父窗口的办法?

QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)

如何使用 Java 在 Selenium WebDriver 中关闭子浏览器窗口

使用 Qt 将 linux 子窗口保持在父窗口之上

QT 全屏显示子窗口