事件过滤器和被安装过滤器的组件必须在同一线程,否则,过滤器将不起作用。另外,如果在安装过滤器之后,这两个组件到了不同的线程,那么,只有等到二者重新回到同一线程的时候过滤器才会有效。
//在myWidget.h文件中保护类型下
bool eventFilter(QObject *obj,QEvent *e);
//在myWidget.cpp
//在构造函数中安装过滤器
ui->label->installEventFiletr(this);
//创建过滤器
bool myWidget::eventFilter(QObject *obj,QEvent *e)
{
if(obj == ui->label)//obj就是对象
{
QMouseEvent * env = static_cast<QMouseEvent *>(e);//类型转换
if(e->type == QEvent::MouseMove)//鼠标移动事件
{
ui->label->setText(QString("Mouse move:(%1,%2)").arg(env->x()).arg(env->y()));
}
else{
return QWidget::eventFilter(obj,e);
}
}
else
{
return QWidget::eventFilter(obj,e);
}
}