Qt鼠标穿透

本文介绍了如何在Qt中实现鼠标穿透功能,分别讲解了Windows API的SetWindowLong函数和Linux X11 API的XShapeCombineRectangles函数的使用。在Windows下,利用SetWindowLong实现窗口鼠标穿透;在Linux下,通过XShapeCombineRectangles函数设置和取消鼠标穿透。同时,文章提到了Qt5自带的函数也可以实现这一功能。
摘要由CSDN通过智能技术生成


鼠标穿透的意思是所有鼠标键盘操作全部会穿透窗口到下方窗口,一种是穿透到父窗口,一种是穿透到桌面。

一、穿透到父窗口

当前窗口及子控件均不响应鼠标事件

setAttribute(Qt::WA_TransparentForMouseEvents, true);

当前窗口透明区域不响应鼠标事件

setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
setAttribute(Qt::WA_TranslucentBackground, true);

自定义当前窗口区域响应鼠标事件

void QWidget::setMask(const QRegion &region)

注意:如果设置的区域很复杂,效果可能会很慢。

二、穿透到桌面

鼠标点击穿透被广泛应用在桌面挂件程序上,目的是为了避免鼠标对窗体进行误操作。

Qt 并没有自带的方法可以实现该功能,所以需要调用系统本身的 API 来实现。这里介绍下 Windows 下和 Linux 下如何实现鼠标点击穿透。

很多 osd 桌面歌词程序经常用

 
#ifdef Q_OS_LINUX
#include <X11/extensions/shape.h>
#endif
#ifdef Q_OS_WIN
#include <windows.h>
#endif

#ifdef Q_OS_LINUX
        XShapeCombineRectangles(QX11Info::display(), winId(), ShapeInput, 0,
                             
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值