2016-09-28 21 views
1

我有一个Qt应用程序保持在其他窗口之上。主窗口无框且透明。把它放在其他窗口上方,我遵循以下过程。如何将我的Qt应用程序主窗口始终放在Windows的任务栏上方?

SetForegroundWindow((HWND)winId()); 
Qt::WindowFlags flags = this->windowFlags(); 
flags = flags & ~Qt::WindowMinimizeButtonHint; 
this->setWindowFlags(flags|Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint); 
ui.setupUi(this); 

此代码片段将我的Qt主窗口放在所有窗口之上,也放在任务栏之上。 问题在于,无论何时任何区域的任务栏被点击,任务栏上方的主窗口区域将落在任务栏后面。任务栏出现在前面。主窗口仍然保持在所有其他窗口之上。看起来,我的主窗口的底部区域已经落后于任务栏。

我该如何防止任务栏推出自身背后的主窗口区域?我想保持我的窗口高于任何窗口,也高于任务栏。

+1

您确定您已经问过自己这个设计是否能提供良好的用户体验吗?作为一个用户,如果在任何时候都试图掩盖任务栏,我会感到不安... –

回答

2

你不能。 Qt::WindowsStaysOnTopHint标记了一个窗口,窗口样式为WS_EX_TOPMOST,所有这些窗口可以彼此重叠。见Raymond Chen的偶尔在The Old New Thing上的咆哮。

最好的办法是限制你的窗口的位置,使其无法在任务栏的上方移动。

0

,如果你可以访问Windows API或Qt拥有可以使用等效功能SetWindowPos

SetWindowPos(hWnd, ((HWND)-1), 0, 0, width, height, 0); 

这里的hWnd是一个句柄到你的窗口和宽度和高度与宽度和高度的屏幕(如果你想全屏)。传递-1作为HWND会将窗口放在所有其他非最顶层窗口之上。即使窗口关闭后,它仍会保持最高。

0

感谢您的回答。感谢Martin Bonner为博客The Old New Thing提供参考。

我已经通过使用定时器和提高我的窗口比其他任务栏试过的替代品。我的窗口完全透明,无框架,没有标题栏和状态栏。它只包含一个矩形边框和底部的一些按钮。

我在任务栏上方每隔500毫秒提升窗口。所以如果用户点击任务栏中的任何区域,我任务栏后面的窗口部分就会再次出现在前面。

if (this->isActiveWindow() == false) 
    this->raise(); 

是提高窗口,如果任何其他应用程序正在使用类似的方法来提高自身上述任务栏可能引起周围条件种族这种方式。 所以我想确保这个方法正常工作,两个具有类似方法来提升自身的应用程序不应该一起运行。

相关问题