VS2017 + Qt设置窗口置顶与不置顶的注意问题

tech2026-08-16  2

Qt中默认的设置窗口置顶的方法是:

Qt::WindowFlags flag = windowFlags(); setWindowFlags(flag | Qt::WindowStaysOnTopHint);

但是这样设置有问题,正如其他博友说过的,必须要设置 show(),强制让当前窗口显示出来。

使用这种方法会导致在转换顶置时候,页面出现闪屏情况。

那么,只有使用C++自带的API,

设置顶置

::SetWindowPos((HWND)this->winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

取消置顶

::SetWindowPos((HWND)this->winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

如果在使用这个API时,不需要设置窗口显示,没有闪屏的问题。

如果出现该函数无法识别时,只需要加上#include <atlconv.h> //编码转换文件,一般该头文件只放在.cpp文件中使用。该函数的主要作用是可以在Qt中操作C++中特有API。如果放到了.h中,有可能会出现各种各样的问题。

最新回复(0)