Qt非阻塞叠加对话框

时间:2016-06-23 09:23:42

标签: c++ qt dialog modal-dialog

我想在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小部件

停靠小部件几乎可以实现它的功能。但它也停靠,看起来不像是一个对话框。

我在找什么?

1 个答案:

答案 0 :(得分:1)

我认为您所寻找的是无模式工具窗口。

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属性来控制。