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

时间:2015-01-09 23:00:55

标签: c++ qt layout window

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

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

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

上面将孩子放在父母的上面,它允许在孩子被启动时对父母进行工作......但是如果孩子失去焦点,孩子就会隐藏在父母后面。

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();

孩子处于最顶层,正如我想要的那样,我可以在孩子仍在最佳位置时对父母工作......但是尽量减少父母也不会使孩子最小化,并且孩子仍然在所有孩子身上windows(它应该只保留在父级之上)

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

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

1 个答案:

答案 0 :(得分:9)

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

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