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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧