qt 事件过滤器

前言:
有时会有这种需求想让 label 图标 具有点击功能, 但用 button 的话, 显示效果又不好。 那这里就介绍 一种 方法。 那就是 事件过滤器(eventfilter)

1: 事件过滤器
eventfilter 不只有有过滤事件的功能, 还有添加事件的功能

2: 使用
1> void installEventFilter(QObject *filterObj);
2> bool eventFilter(QObject *obj, QEvent *event);

3: 代码
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
// 安装事件过滤器
ui->pushButton->installEventFilter(this);
// 安装事件过滤器
ui->label->installEventFilter(this);
connect(ui->pushButton,&QPushButton::clicked,[this]{
qDebug()<<"pushbutton clicled";
});
}
Dialog::~Dialog()
{
delete ui;
}
// 事件过滤器
bool Dialog::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::MouseButtonPress)
{
if(obj == ui->pushButton)
{
qDebug()<<"event filter pushbutton";
return true;
}
else if(obj == ui->label)
{
qDebug()<<"install event label";
return true;
}
}
// return false;
//这种最好用原有的替代 true false, 因为有可能你重写的虚函数,阉割了之前控件自带的属性。
// 为了保持既有你修改的属性和原有的属性。 return QDialog::eventFilter(obj, event);
// 这样最最好的解决。
return QDialog::eventFilter(obj, event);
}

 

版权声明:本文为CSDN博主「黑塞123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_14854721/article/details/108281912

posted @   代码改变世界11  阅读(302)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示