在Qt中关闭新的非子窗口

时间:2009-06-20 09:23:28

标签: qt qwidget

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


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

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

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

希望描述好一点。

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

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

2 个答案:

答案 0 :(得分:10)

您需要以下内容:

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

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

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

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

  

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

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

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

答案 1 :(得分:0)

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

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

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