事件分发器:向下分发事件,返回值是Bool类型,若返回的是true,代表用户处理这个事件,不向下分发事件,向下分发事件则会调用事件的处理函数
.h
///重写事件分发器 拦截鼠标按下事件 bool event(QEvent *ev);
.cpp
bool Small::event(QEvent *ev)
{
if(ev->type()==QEvent::MouseButtonPress)
{//自己处理鼠标按下事件
QMouseEvent *qm=static_cast<QMouseEvent*>(ev) ;
QString as=QString("event a=%1").arg(qm->x());
qDebug()<<as;
return true;
}
//其他事件还是父类处理
return QWidget::event(ev);
}
事件过滤器:
在事件分发器之前做一次高级的拦截
///事件过滤器bool eventFilter(QObject *,QEvent *);
.cpp
Small::Small(QWidget *parent) :
QWidget(parent),
ui(new Ui::Small)
{
ui->setupUi(this);
//安装事件过滤器
ui->label->installEventFilter(this);
}
///事件过滤器
bool Small::eventFilter(QObject *obj,QEvent *ev)
{
if(obj==ui->label)
{
if(ev->type()==QEvent::MouseButtonPress)
{
qDebug()<<"事件过滤器";
return true;
}
}
return QWidget::eventFilter(obj,ev);
}
1万+

被折叠的 条评论
为什么被折叠?



