gpt4 book ai didi

c++ - Qt 非阻塞叠加对话框

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:57 25 4
gpt4 key购买 nike

我想在 Qt 4.8 中创建一个对父对话框不阻塞但在打开时保持在父对话框之上的对话框。

到目前为止我尝试了什么:

parent

以下代码在 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 );

停靠小部件

停靠小部件几乎可以完成它应该做的事情。但它也停靠并且看起来不像对话框。

我在找什么?

最佳答案

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

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标志的含义:

表示小部件是一个工具窗口。工具窗口通常是一个小窗口,其标题栏和装饰比通常的要小,通常用于工具按钮的集合。如果有父对象,工具窗口将始终保持在父对象之上。如果没有 parent ,您也可以考虑使用 Qt::WindowStaysOnTopHint。如果窗口系统支持,工具窗口可以用更轻的框架装饰。它还可以与 Qt::FramelessWindowHint 结合使用。在 OS X 上,工具窗口对应于窗口的 F​​loating 类。这意味着窗口位于普通窗口之上;不可能在它上面放一个普通的 window 。默认情况下,工具窗口会在应用程序处于非事件状态时消失。这可以通过 Qt::WA_MacAlwaysShowToolWindow 属性来控制。

关于c++ - Qt 非阻塞叠加对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37987426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com