QT 事件过滤器实现鼠标悬浮时两个按钮背景互换_qt悬浮按钮-程序员宅基地

技术标签: 鼠标悬浮  QT  pushbutton  事件过滤  

假设我们在一个 Dialog 中放置了两个 PushButton ,分别叫 pushButton 和 pushButton_2。

要实现功能:

  • 当鼠标悬浮到其中一个pushButton上时,两个pushbutton的QSS样式互换

newdialog.h

class newDialog : public QDialog
{
	...
	代码省略
	...
public:
	//自定义函数,用来注册需要管理的对象
	void toInstallEventFilter(); 
	//用来处理需要管理的对象的事件
	bool eventFilter(QObject *target, QEvent *event);
	...
	代码省略
	...
};

newdialog.cpp

//构造函数
newDialog::newDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::newDialog)
{
    ui->setupUi(this);
	//在构造函数中调用自定义函数 toInstallEventFilter()
    toInstallEventFilter();
}

//自定义函数
void newDialog::toInstallEventFilter()
{
    ui->pushButton->installEventFilter(this);
    ui->pushButton_2->installEventFilter(this);
}

//事件过滤器函数
bool newDialog::eventFilter(QObject *target, QEvent *event)
{
    if(target == ui->pushButton)
    {
        if(event->type() == QEvent::Enter)
        {
            ui->pushButton->setStyleSheet("QPushButton#pushButton{background-color: rgb(46, 52, 54);}");
            ui->pushButton_2->setStyleSheet("QPushButton#pushButton_2{background-color: rgb(238, 238, 236);}");
        }
        ui->pushButton->show();
        ui->pushButton_2->show();
    }
    if(target == ui->pushButton_2)
    {
        if(event->type() == QEvent::Enter)
        {
            ui->pushButton_2->setStyleSheet("QPushButton#pushButton_2{background-color: rgb(46, 52, 54);}");
            ui->pushButton->setStyleSheet("QPushButton#pushButton{background-color: rgb(238, 238, 236);}");
        }
        ui->pushButton->show();
        ui->pushButton_2->show();
    }

    return QDialog::eventFilter(target, event);
}

示例(截图中没有鼠标指针标志,实际上是有的):
当鼠标悬浮在左pushButton时:
这里写图片描述
当鼠标悬浮在右pushButton时:
这里写图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baishuiniyaonulia/article/details/81273582

智能推荐

软件测试常用方法实例与分析_软件测试如何找测试点实例分析-程序员宅基地

文章浏览阅读5.9k次。软件测试常用方法总结实例分析_软件测试如何找测试点实例分析

Golang 判断数组某个元素是否存在 (isset)_golang isset-程序员宅基地

文章浏览阅读3.9w次。如,现在需要判断命令行是否传了参数,即os.Args[1] 是否存在如果使用下述的判断:package mainimport ( "fmt" "os")func main() { if os.Args[1] != "" { fmt.Println("aaa") } else { fmt.Println("bbb") } }会报错:index out ..._golang isset

使用AI预测北京房价:Bj_HousePricePredict项目解析与实践-程序员宅基地

文章浏览阅读352次,点赞5次,收藏3次。使用AI预测北京房价:Bj_HousePricePredict项目解析与实践项目地址:https://gitcode.com/xiaoyusmd/Bj_HousePricePredict项目简介Bj_HousePricePredict 是一个基于Python的数据挖掘和机器学习项目,其主要目标是通过分析历史数据来预测北京市的房价。该项目包含了数据预处理、特征工程、模型训练与验证等多个环节,提...

Linux下zabbix监控 MySQL_]# zcat /usr/share/doc/zabbix-server-mysql*/create-程序员宅基地

文章浏览阅读155次。zabbix 4.0源码安装参考 我的这边博文自从安装完毕 zabbix-4.0.10 之后一直在研究如何添加更多的监控项,完善监控系统,以下提供 监控MySQL方法,供参考//系统(需要关闭SELinux/iptables打开对应端口或关闭)CentOS release 6.10 (Final) 2.6.32-754.el6.x86_64//服务器规划//zabbix-server ..._]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -

[CTFHub]基础认证:Here is you flag:click(web>web前置技能>HTTP协议)_ctfhub 基础认证 here is your flag: click-程序员宅基地

文章浏览阅读2.4k次,点赞7次,收藏18次。这道题做一个详细的解释题目是这样的:点击“click”,会进入一个登录界面:在这个题目给的附件中是一个密码包,准确的说需要爆破密码我们需要准备一个软件,叫做Burp SuiteBurp Suite官网下载官网有免费版的Burp Suite:下载以后直接安装就可以使用了。一直点击下一步就可以了接着我们打开Windows设置,设置代理:然后点击红色圈进入,按照如图设置,设置完先关闭代理。一定要点击保存!———————————————————————————————————_ctfhub 基础认证 here is your flag: click

NTOP_ntop 功能简介-程序员宅基地

文章浏览阅读690次。NTOP是一种灵活且功能齐全的用来监控解决局域网问题的工具,它同时提供命令行输入和Web界面,可以用于嵌入式Web服务。在一个不大的软件包里,主机的流量、网段的统计、AS自治系统的通讯、各VLAN的状况都可以一目了然。甚至还支持了对于Skype, BT等P2P的流量的识别。 http://www.ntop.org/overview.html_ntop 功能简介

随便推点

main方法参数疑问_一个类example的main()方法的参数是args-程序员宅基地

文章浏览阅读2k次。今天在网上看到一个这样的题目(如下),在我的能力范围之内,我认为此题选择C项,可是答案是D,我不明白原因,求大神帮忙啊。。。一个类Example的main()方法的参数是args,类被如下调用执行:java Example cat main方法中访问args[0]的输出是什么?A、catB、ExampleC、javaD、NullPointerException异常_一个类example的main()方法的参数是args

项目总结——基于WebGL的点云全景可视化_webgl 大量点云处理-程序员宅基地

文章浏览阅读1.6w次,点赞12次,收藏47次。1.项目简介这个项目是我2016年研一上学期的个人项目,目的是使用webgl在浏览器端渲染点云和全景数据,要求流畅高效,能够实现海量点云和全景数据的可视化,以及基于点云的简单量测功能(使用ThreeJS库,也涉及到简单的前端、数据库知识)。这个项目是在我的本科毕业设计的基础上进行的,本科毕设做的是基于webgl的点云可视化(点云网络可视化示例),研一上做的是用多分辨率八叉树建立点云索引,并增加_webgl 大量点云处理

[angular + ngzorro报错]the icon appstore-o does not exist or is not registered._uncaught error: [@ant-design/icons-angular]:the ic-程序员宅基地

文章浏览阅读846次。原因是在build项目的时候找不到路径导致的解决方案在angular.js 中加入 { "glob": "**/*", "input": "./node_modules/@ant-design/icons-angular/src/inline-svg/", "output": "/assets/" }..._uncaught error: [@ant-design/icons-angular]:the icon user-o does not exist o

java.lang.NoSuchMethodError错误_numberdeserializers$bigdecimaldeserializer.deseria-程序员宅基地

文章浏览阅读4.3k次。Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer$.handledType()Ljava/lang/Class;at com.fasterxml.jackson.module.scala.deser.Num_numberdeserializers$bigdecimaldeserializer.deserialize

Postman工具使用——持续更新-程序员宅基地

文章浏览阅读8.4k次。Postman工具使用——持续更新一、测试接口传递对象参数一、测试接口传递对象参数url:使用的是post方式请求在Headers设置:在Body写入对象信息,主要红线的地方:

spring-beans核心容器_containedbeanmap-程序员宅基地

文章浏览阅读251次。spring beans 核心容器介绍,循环依赖,生命周期_containedbeanmap