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