c++ Qt非阻塞覆盖对话框

xjreopfe  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(208)

我想在Qt 4.8中创建一个对话框,它不阻塞父对话框,但在打开时保持在父对话框的顶部。
目前为止我尝试的是:

父级

下面的代码完全符合我在Gnome上的要求,但在Windows/Mac上,当主窗口获得焦点时,对话框会转到后面:

QMainWindow* window = new QMainWindow();
QDialog* dialog = new QDialog( window );

window->show();
dialog->show();

永远在最上面

也有可能使对话框总是在顶部,但我不认为我的应用程序对用户如此重要,以至于他希望它甚至在其他应用程序的顶部:

dialog->setWindowFlags( dialog->windowFlags() | Qt::WindowStaysOnTopHint );

模态对话框

也可以创建窗口模式对话框,但是当对话框打开时,会阻碍用户与主窗口的交互。

dialog->setWindowModality( Qt::WindowModal );

Dock widget

一个dock小部件做了它应该做的事情,但它也是dock,看起来不像一个对话框。
我在找什么?

o2gm4chl

o2gm4chl1#

我认为你正在寻找的是无模式的工具窗口。

QMainWindow* window = new QMainWindow();
QDialog* dialog = new QDialog( window );

Qt::WindowFlags flags = dialog->windowFlags();
dialog->setWindowFlags(flags | Qt::Tool);

window->show();
dialog->show();

摘自QT文档,这是Qt::Tool标志的含义:

  • 表示小部件是一个工具窗口。工具窗口通常是一个小窗口,其标题栏和装饰比通常的小,通常用于工具按钮的集合。如果有父窗口,则工具窗口将始终保持在它的顶部。如果没有父窗口,您可以考虑使用Qt::WindowStaysOnTopHint。如果窗口系统支持它,则工具窗口可以使用稍微较轻的框架进行装饰。它也可以与Qt::FrameLessWindowHint组合使用。在OS X上,工具窗口对应于窗口的Floating类。这意味着窗口位于普通窗口之上的级别;不可能在它上面放一个普通的窗口。默认情况下,当应用程序处于非活动状态时,工具窗口将消失。这可以通过Qt::WA_MacAlwaysShowToolWindow属性控制。*

相关问题