欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

Qt 调用 Windows 接口实现窗口置顶

发布时间:2025/1/21 windows 77 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Qt 调用 Windows 接口实现窗口置顶 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言

用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗口置顶就不管用了,总的来说不太稳定,这时候就需要调用 Windows 自身的接口来实现该功能了.

正文

首先在工程文件pro中添加库

win{LIBS += -lUser32 }

为了保证窗口始终置顶,这里我在窗口中开启一个定时器去执行以下函数

#ifdef Q_OS_WINSetWindowPos((HWND)this->winId(), HWND_TOPMOST, this->x(), this->y(), this->width(), this->height(), SWP_SHOWWINDOW);SetWindowLong((HWND)this->winId(), GWL_EXSTYLE, GetWindowLong((HWND)this->winId(), GWL_EXSTYLE) | WS_EX_NOACTIVATE); #endif

需要包含头文件

#ifdef Q_OS_WIN #include "Windows.h" #endif

通过以上方法就可以将窗口置顶了,但是在实际项目中发现了一个问题,如果调用了这个接口实现置顶,那么如果再讲窗口设置 hide(),那么程序在系统栏上的图标没办法隐藏.
我的应用场景如下:
主窗口 A,在主窗口中创建一个副窗口 B,但是不指定 B 的父窗口,并且在 B 窗口中调用以上函数实现窗口置顶,那么在启动的时候 B 窗口就会独立出来并且置顶,而系统状态栏上就出现了两个窗口图标(因为 B 没有置顶父窗口),这时候在 A 窗口中调用接口将 B 窗口隐藏(hide),如果在没调用 Windows 接口置顶的情况下B 窗口图标是可以隐藏的,但是如果调用了以上接口,B 窗口图标就没办法隐藏.
我遇到的这个问题暂时没找到解决办法.

总结

以上是生活随笔为你收集整理的Qt 调用 Windows 接口实现窗口置顶的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。