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

前言

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

正文

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

win{
    LIBS += -lUser32
}

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

#ifdef Q_OS_WIN
        SetWindowPos((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 窗口图标就没办法隐藏.

我遇到的这个问题暂时没找到解决办法.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值