我想在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 );
停靠小部件几乎可以实现它的功能。但它也停靠,看起来不像是一个对话框。
我在找什么?
答案 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属性来控制。