Qt:保持 child window 在 parent 之上,即使它失去焦点

Qt: Keep child window on top of parent even when it loses focus

我有一个 UI window 被主 window 调用。我希望它是 non-modal,但保持在 parent 之上,如果 parent 被最小化,则与它一起最小化。

如果用户想对两者进行更改,他应该可以,并且 child 不会关闭,除非用户关闭它。 child 将始终位于 parent 之上 - 但不会位于其他任何东西之上。

m_child->show();
m_child->activateWindow();

以上将 child 置于 parent 之上,它允许在 child 已启动的同时在 parent 上工作...但是 child 如果失去焦点,则隐藏在 parent 后面。

m_child->show();
m_child->activateWindow();
m_child->raise();

没有变化。

使用

Qt::WindowFlags flags = m_child->windowFlags();
m_child->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
m_child->show();
m_child->activateWindow();

child 位于顶部,如我所愿,我可以在 parent 上工作,而 child 仍显示在顶部...但最小化 parent 也不会最小化 child,并且 child 位于所有 windows 之上(它应该只位于 parent 之上)

如何制作 "toolbox style" 效果 - 在 parent 处于活动状态时将 child 置于 parent 之上,但在 child 最小化时 parent 最小化 ?

我还尝试了所有 window 标志,但它们允许 child 在失去焦点时隐藏。

您可以通过向工具箱小部件添加 Qt::Tool 标志并将主 window 设置为其父级来实现此行为。

http://doc.qt.io/qt-5/qt.html#WindowType-enum