1、首先要在构造函数中注册监听
this->installEventFilter(this);//注册监视对象
2、一旦event Filter注册了, 事件在被发送到原来的目的地之前, 会先发到这个类的eventFilter()函数.
下面是eventFilter函数
bool XX::eventFilter(QObject *obj, QEvent *e)
{
if (e->type() == QEvent::Wheel)//滚轮事件
{
QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(e);
if (pages.indexOf((QWidget*)obj) != -1)
{
if (wheelEvent->modifiers() == Qt::ControlModifier)//判断修饰键【Ctrl】是否按下 放大缩小
{
QSize size = page->size();
if(wheelEvent->delta() > 0)//delta为负就是向上滚动 delta为正就是向上滚动
{
size *= 1.4;
}
else
{
size *= 0.7;
}
page->resize(size);
return true;
}
else
{
if(wheelEvent->orientation() == Qt::Vertical)//垂直滚动
{
return scrollWidget->verticalScrollBar()->event(wheelEvent);
}
else if (wheelEvent->orientation() == Qt::Horizontal)//水平滚动
{
return scrollWidget->horizontalScrollBar()->event(wheelEvent);
}
}
}
else if (obj == this)
{
return obj->event(e);
}
}
else if (e->type() == QEvent::KeyPress)//键按下
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
if ((keyEvent->key() == Qt::Key_0) && (keyEvent->modifiers() == Qt::ControlModifier))
{
reshow(this->size());
return true;
}
}
return obj->event(e);
}
其中obj是对象,当多个对象注册了监听,可在此函数中判断对不同的对象进行不同的操作。