Qt主窗體顯示最前


在delphi中使用Application.BringToFront;可以保證當前程序顯示在最前。

然而今天在Qt中,沒有類似函數供調用。

嘗試了activeWindow,show,showNormal,showMaximized 等函數還是不行。

網上有方法設置窗體的windowFlags,具體方法為:

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

但是該代碼會導致該窗體霸道的總是在最前,無法切換到諸如瀏覽器等其他應用。即使再設置如下代碼:

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

也不能取消“總在最前”這個狀態。

其實我就是想要其顯示在最前面而已,最后想到用windows消息,模擬windows切換任務欄,但無奈不清楚windows是如何發送該消息的。

經過網上搜查,如下代碼即可解決,將窗口顯示到最前的效果,且無其他副作用:

if (pMainForm->isMinimized())
{
    pMainForm->showNormal();
}
//設置窗口置頂
::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_TOPMOST ,就會又出現總是在最前的情況。

 

參考:http://forum.qt.io/topic/6032/bring-window-to-front-raise-show-activatewindow-don-t-work-on-windows


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM