QT 事件过滤器实现鼠标悬浮时两个按钮背景互换

简介: QT 事件过滤器实现鼠标悬浮时两个按钮背景互换

假设我们在一个 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时:


0a2653c851af460fa595bd959398a8f1.png


当鼠标悬浮在右pushButton时:


2d65d23f6d4748949b924e4057485923.png

相关文章
|
7月前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
91 0
|
2月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
106 3
(13) Qt事件系统(two)
|
2月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
94 0
(12)Qt事件系统(one)
|
4月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
236 4
|
4月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Radio Button的使用及说明
680 1
|
4月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
179 0
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明
|
4月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
108 0
|
6月前
Qt控件(按钮、单选、复选、list、tree、table)
Qt控件(按钮、单选、复选、list、tree、table)
|
6月前
Qt之按钮操作
Qt之按钮操作
|
6月前
Qt事件分发器、事件过滤器
Qt事件分发器、事件过滤器