QT程序 windows窗口置顶和linux窗口置顶遇到的问题和解决方案

一、QT 窗口置顶

一般情况下,我们开发QT桌面应用程序如需用到窗口置顶操作时,会这样做:

setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

但经过尝试发现此方法会导致窗口被隐藏,再次调用 show方法又会导致闪烁,查看源码后发现在窗口被创建后(构造函数执行完成后),调用setWindowFlags会导致窗口被 hide,而在构造函数内部调用setWindowFlags则不会引起窗口的hide。

因此此方法并不适用。

二、windows 下窗口置顶

windows 下窗口置顶可采用下面的方法:

  ::SetWindowPos((HWND)winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

取消置顶:

  ::SetWindowPos((HWND)winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

SetWindowPos 方法函数原型:

WINUSERAPI BOOL WINAPI SetWindowPos(HWND hWnd,HWND hWndInsertAfter,int X,int Y,int cx,_In_ int cy, UINT uFlags);

SetWindowPos 方法参数详解:

序号参数
    原文作者:q2nAmor
    原文地址: https://blog.csdn.net/u012534831/article/details/103458107
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞