我试图制作2个窗口。应该在第1次调用第2次。我没有连接他们孩子 - >父母。 但当我打电话给第二个窗口并关闭时,第一个窗口也关闭了。我该怎么办? 这两个窗口都来自QWidget。 C ++和Qt


对不起我的可怜描述。 我有一个主窗口。继承自QMainWindow的类。我创建了第二个窗口。继承自QWidget的类。 在第一个(主窗口)我正在创建并调用第二个窗口

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

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

希望描述好一点。

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

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
没有它们一切都很好。如果我在窗口中需要那些标志,我可以改变一些东西吗?

有帮助吗?

解决方案

您需要以下内容:

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

以下是测试程序: http://pastebin.com/f5903c5f4

请注意,现在您需要明确调用退出() 在主窗口的析构函数中。

如果您阅读 QApplication :: quitOnLastWindowClosed文档,您会发现出来:

  

如果此属性为true,则应用程序在关闭具有Qt :: WA_QuitOnClose属性集的最后一个可见主窗口(即没有父窗口的窗口)时退出。默认情况下,为子窗口

以外的所有窗口小部件设置此属性

因为您的主窗口是(无框架)工具窗口,所以它会计数。这使得ConfWindow成为唯一的非子窗口顶级窗口小部件。因此,如果您关闭ConfWindow,它会激活应用程序实例退出。

其他提示

如果这是代码,那么Qt中存在一个巨大的错误 上面的代码永远不应该关闭你的第一个Windows,必须有其他错误。
应用程序是关闭还是崩溃?

<强>备注结果 谁在删除configWindow?有一个 Qt :: WA_DeleteOnClose 属性,可以在窗口关闭后删除它。

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top