C++ 如何将Qt应用程序主窗口始终放在Windows中的任务栏上方?

C++ 如何将Qt应用程序主窗口始终放在Windows中的任务栏上方?,c++,windows,qt,qt5,taskbar,C++,Windows,Qt,Qt5,Taskbar,我有一个Qt应用程序,它仍然位于其他窗口的顶部。主窗口是无框架和透明的。为了将它置于其他窗口之上,我遵循了以下步骤 SetForegroundWindow((HWND)winId()); Qt::WindowFlags flags = this->windowFlags(); flags = flags & ~Qt::WindowMinimizeButtonHint; this->setWindowFlags(flags|Qt::FramelessWindowHint|Qt:

我有一个Qt应用程序,它仍然位于其他窗口的顶部。主窗口是无框架和透明的。为了将它置于其他窗口之上,我遵循了以下步骤

SetForegroundWindow((HWND)winId());
Qt::WindowFlags flags = this->windowFlags();
flags = flags & ~Qt::WindowMinimizeButtonHint;
this->setWindowFlags(flags|Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint );
ui.setupUi(this);
此代码段将my Qt Main窗口置于所有窗口之上,也置于任务栏之上。 问题是,每当单击任务栏的任何区域时,任务栏上的主窗口区域ABR都会在任务栏后面。任务栏在前面。主窗口仍然高于所有其他窗口。似乎主窗口的底部区域已位于任务栏后面


如何防止任务栏将主窗口区域推到其后面?我想让我的窗口高于所有窗口,也高于任务栏。

你不能
Qt::WindowsStaysOnTopHint
WS_EX_top
窗口样式标记一个窗口,并且所有这样的窗口可以彼此重叠。看看陈雷蒙偶尔在电视上的咆哮


最好的办法是限制窗口的位置,使其不能在任务栏顶部移动。

如果可以访问windows api或Qt,则可以使用等效的函数

乙二醇


其中hWnd是窗口的句柄,width和height是屏幕的宽度和高度(如果需要全屏)。将-1作为HWND传递将使该窗口高于所有其他非最上面的窗口。即使在关闭窗口后,它仍将保持在顶部。

谢谢您的回答。感谢Martin Bonner为该博客提供参考

我已经尝试了另一种方法,使用定时器,将窗口提升到其他任务栏上。我的窗口是完全透明的,没有框架,没有标题栏和状态栏。它只包含一个矩形边框和底部的一些按钮

我在任务栏上方每隔500毫秒升起一次窗口。因此,如果用户单击任务栏中的任何区域,任务栏后面的窗口部分将再次出现在前面

if (this->isActiveWindow() == false)
    this->raise();
是的,如果任何其他应用程序使用类似的方法将自身提升到任务栏上方,这种提升窗口的方式可能会导致竞相条件。
因此,我想为了确保此方法正确运行,两个具有相似提升方法的应用程序不应该同时运行。

您确定您已经问过自己此设计是否提供了良好的用户体验吗?作为一个用户,如果有什么东西一直试图掩盖任务栏,我会非常不安。。。
if (this->isActiveWindow() == false)
    this->raise();