Qt - 窗口顶层显示

Qt - 窗口顶层显示

最近有需求是,将一个全屏显示的程序在开机时自启动,同时占据屏幕显示,过程中遇到启动后 windows 任务栏会覆盖显示的问题,而 Qt 里面没有提供将当前窗口临时提升到顶层的函数,经过查找,得到以下几种 Qt 中窗口置顶的方法。

setWindowFlags

Qt 提供了设置窗口的 WindowFlags 方法,参数 Qt::WindowStaysOnTopHint 可以将目标窗口置于顶层,但是该方法会使得该窗口一直霸占顶层,无法切换到其他应用,即使使用以下代码

pMainForm->setWindowFlags(pMainForm->windowFlags() & ~Qt::WindowStaysOnTopHint);
pMainForm->showNormal();

也不会取消掉“总是在前”的状态。而我需求是,在程序刚启动的时候将该窗口置于顶层,之后不再霸占顶层,查找后找到 SetWindowPos 方法解决了问题。

关于常用 setWindowFlags 的状态设置:

Qt::FramelessWindowHint   窗口无边框  
Qt::WindowStaysOnTopHint  窗口置顶  
Qt::WindowMaximized       窗口启动最大化  
Qt::SubWindow             表示窗口小部件是子窗口

SetWindowPos

// 窗口置顶
::SetWindowPos(HWND(pMainForm->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
// 取消窗口置顶
::SetWindowPos(HWND(pMainForm->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);                  
 
pMainForm->show();
pMainForm->activateWindow();

该方法在将窗口置顶之后,马上取消掉置顶的状态,如果不设置HWND_NOTOPMOST的话,效果同Qt::WindowStaysOnTopHint一样。

关于 SetWindowPos

你可能感兴趣的:(Qt)