Qt 调用 Windows 接口实现窗口置顶
生活随笔
收集整理的这篇文章主要介绍了
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 接口实现窗口置顶的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Qt for Android调用原生接口
- 下一篇: windows清理图标缓存并重新加载