Qt:即使失去焦点,也要将孩子的窗口保持在父母的顶部

Tha*_*lia 5 c++ layout qt window

我有一个由主窗口调用的UI窗口.我希望它是非模态的,但保持在父级之上,如果父级被最小化,则用它最小化.

如果用户想要在两者中进行更改,他应该能够,并且除非用户关闭它,否则不会关闭孩子.孩子总是会保持在父母之上 - 但不会在其他任何事情之上.

m_child->show();
m_child->activateWindow();
Run Code Online (Sandbox Code Playgroud)

上面将子项放在父项的顶部,它允许在子项启动时对父项进行操作...但如果父项失去焦点,则子项隐藏在父项后面.

m_child->show();
m_child->activateWindow();
m_child->raise();
Run Code Online (Sandbox Code Playgroud)

没变.

运用

Qt::WindowFlags flags = m_child->windowFlags();
m_child->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
m_child->show();
m_child->activateWindow();
Run Code Online (Sandbox Code Playgroud)

孩子在我的头顶上,正如我想要的那样,我可以在孩子仍然在顶部显示时对父母工作......但是尽量减少父母也不会最小化孩子,并且孩子会在所有窗户上停留(它应该只留在父母之上)

如何制作"工具箱样式"效果 - 在父项处于活动状态时将子项置于父项之上,但在父项最小化时最小化子项?

我还尝试了所有的窗口标志,但它们允许孩子在失去焦点时隐藏起来.

Pav*_*hov 9

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

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