首页 > 其他分享 >Qt::WA_TransparentForMouseEvents

Qt::WA_TransparentForMouseEvents

时间:2023-02-07 16:58:30浏览次数:48  
标签:Qt WA setAttribute label TransparentForMouseEvents true 鼠标

(一)Qt::WA_TransparentForMouseEvents

实现鼠标穿透功能,类似“隔空取物、隔山打牛”的效果。

//qwidget.h
void setAttribute(Qt::WidgetAttribute, bool on = true);

启用后,此属性将禁止向小组件及其子件传递鼠标事件。鼠标事件被传递给其他小组件,就像小组件及其子代不存在于小组件层次结构中一样;鼠标点击和其他事件有效地 "穿过 "它们。这个属性在默认情况下是禁用的。

(二)用法

theButton->setAttribute(Qt::WA_TransparentForMouseEvents, true);

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

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

如果当前窗口不透明,但又需要实现鼠标穿透,要注意代码先后顺序:

// 一定要先设置鼠标穿透,否则无法穿透
setAttribute(Qt::WA_TransparentForMouseEvents, true);
 
setWindowFlag(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground, true);

其他应用场景举例:
1、禁止响应鼠标的点击事件,但是需要响应代码层面的信号
2、如果有需要,相比较于设置控件的可用性,设置属性的做法更为隐蔽
3、有些透明窗体(或者异形界面)允许鼠标可以在本窗口界面操作背后的窗口

(三)例子

 //按钮上显示的文字
QLabel * label = new QLabel;
label->setParent(this);
label->setFixedSize(menuBtn->width(),menuBtn->height());
label->setText(QString::number(i+1));
label->move(25 + (i%4)*70 , 130+ (i/4)*70);

//设置label上的文字对齐方式 水平居中 和垂直居中
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

 //鼠标事件穿透
label->setAttribute(Qt::WA_TransparentForMouseEvents,true);

标签:Qt,WA,setAttribute,label,TransparentForMouseEvents,true,鼠标
From: https://www.cnblogs.com/imreW/p/17099014.html

相关文章

  • 使用VMware Converter Standalone P2V(物理机转换虚拟机)
    使用VMwareConverterStandaloneP2V(物理机转换虚拟机)环境说明:1、P2V软件:VMware-converter-en-6.3.0-20575345  下载地址:vCenterConverter:P2VVirtualMachineCon......
  • QT中的类
    1.QChar表示一个字符的类,包含于QtCore判断:boolisDigit()const;//判断是否是十进制数字('0'-'9')boolisLetter()const;//判断是否是字母boolisNumber()const;//判......
  • PyQt 打开子窗口
    实现功能在MainWindow点击按钮“OpenNewWindow”打开SubWindow在SubWindow点击按钮“ClosetheWindow”关闭SubWindow有QtDesigner设计两个窗口,转化为main_ui.py......
  • PHP魔法方法之__sleep()方法和__wakeup()方法
    publicarray__sleep(void)void__wakeup(void)​​serialize()​​​函数会检查是否存在一个魔术方法​​__sleep()​​​.如果存在,__sleep()方法会先被调用,然后......
  • Vmware esxi 打漏洞补丁
    0x00准备去vmware官方下载补丁文件,上载至ESXI存储在打补丁之前,须将ESXI主机上的虚拟机关机且拍好快照或者迁移,生产环境中最好迁移;0x01打补丁cd/vmfs/volumns/Datas......
  • Linux系统如何进行分区?swap分区是什么?
    分区在操作系统中是非常普遍的概念,而且进行分区有很多的好处,分区可以利于快速查找文件,还可以防止由于系统崩溃导致重要文件一起消失,在降低系统盘的容量的同时保证良好的......
  • vue中 watch 监听器的使用
    watchwatch:一个对象,键是需要观察的表达式,值是对应回调函数,也可以是是方法吗或者包含选项的对象。vue实例将会载实例化是调用$watch(),遍历watch对象的每一个property。......
  • 【嵌入式】微芯旺KungFu32A156MQT使用TM1638和TIMER实现流水灯和时钟
    TM1638代码如下#ifndefTM1638_H_#defineTM1638_H_#include"system_init.h"#include"MYGPIO.h"#defineDIO_GPIO_SFRGPIOA_SFR#defineDIO_GPIO_PIN_MAS......
  • DVWA靶场实战(十三)——CSP Bypass
    DVWA靶场实战(十三)十三、CSPBypass:1.漏洞原理:CSPBypass全称是Content-Security-Policy,中文叫做绕过内容安全策略。Content-Security-Policy是一个HTTP响应头的名称......
  • Qt 项目架构之四:实战项目
    下面实现一个最基本的架构项目。一、程序的代码目录管理代码目录,就是你存放源码的目录,一般程序都划分为各种模块来实现,所以为每个模块单独创建一个目录来存放,是比较推荐......