2015-01-09 373 views
5

我有一个由主窗口调用的UI窗口。我希望它是非模态的,但是保持在父类之上,并且如果父类最小化,那么最小化它。Qt:即使在失去焦点时仍将子窗口保留在父窗口之上

如果用户想在两者中进行更改,他应该能够,并且除非用户关闭它,否则孩子不会关闭。孩子会永远留在父母的头顶上 - 但不能放在其他任何东西之上。

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

的孩子放在上面,因为我想,我可以在家长的工作,而孩子仍然在上面显示...但尽量减少家长不尽量减少孩子以及,并且孩子停留在所有窗口之上(它应该只停留在父窗口的顶部)

我该如何制作“工具箱样式”效果 - 在父活动时将子项放在父项之上,但尽量减少孩子什么时候父母最小化?

我也试验了所有的窗口标志,但是它们允许孩子在失去焦点时变得隐藏。

回答

9

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

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

+0

谢谢!我已经尝试了Qt :: Tool标志,但不知道父母,这完美的作品! – Thalia 2015-01-09 23:12:56

+1

对于Mac而言,行为并非如我所愿 - 即使我将应用程序最小化时,“工具”窗口始终保持在最前端...我试过setAttribute(Qt :: WA_MacAlwaysShowToolWindow,false),但它似乎没有任何区别..是否有任何标志,将模仿Mac上的Windows行为? – Thalia 2015-01-13 15:26:59