[英]Application with multiple windows in Qt
在 Qt 中创建具有多个 windows 的应用程序的好方法是什么? 像 GIMP 之类的东西。 我已经阅读了这个答案,这不是我需要的。
我有两个 windows,一个带有控件,一个带有 OpenGL。 现在我有这样的事情:
int main()
{
// some code
MainWindow mw;
mw.show();
GLWindow gw;
gw.show();
// ...
}
我不喜欢这个有两个原因。 第一个原因是当我启动我的应用程序时,带有 OpenGL 的 window 将位于顶部(因为它是最后一个调用show()
)但MainWindow
将被埋在所有打开的 Z0F4137ED1502B5045D6083AA258B54C 下的某个地方我需要的是 windows 在所有东西(如 GIMP)的前面,最好关注MainWindow
(我想我可以把它们放在前面,所以这是小问题)。 我不喜欢这个的第二个原因是,只有当我关闭 windows 时,我的应用程序才会完全关闭。
所以我想在MainWindow
中引用GLWindow
,并从MainWindow
创建它。
这是用几个 windows 创建应用程序的好方法吗?
编辑:GLWindow 继承自 QOpenGLWindow。
我不确定我是否完全理解这种情况,但通常情况下,您可以制作QMainWindow
的“辅助”小部件子对话框。 鉴于您的示例代码类似于...
int main ()
{
// some code
MainWindow mw;
mw.show();
/*
* Secondary windows should be created with the QMainWindow mw
* as their parent.
*/
GLWindow gw(&mw);
/*
* Set the Qt::Dlaog window flag to `encourage' the QMainWindow
* and its children to behave as a group.
*/
gw.setWindowFlags(gw.windowFlags() | Qt::Dialog);
gw.show();
// ...
}
现在所有小部件都表现为一个组(可能取决于正在使用的 window 管理器),默认情况下,关闭QMainWindow
将关闭应用程序。
您做对了,但是通过以下简单的技巧,您可以解决这两个导致您不喜欢正确方法的问题:
MainWindow mw;
mw.show();
mw.activateWindow();
GLWindow gw;
gw.show();
gw.activateWindow();
closeEvent
。 为此,请将以下代码添加到 windows 的header文件中:protected:
void closeEvent(QCloseEvent *event) override;
而在closeEvent的实现中,只需要写qApp->quit();
. 这样,一旦您关闭 window,您的应用程序将完全终止。
主窗口.cpp
void MainWindow::closeEvent(QCloseEvent *event)
{
qApp->quit();
}
和
GLWindow.cpp
void GLWindow::closeEvent(QCloseEvent *event)
{
qApp->quit();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.