父控件内的关键代码
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget),m(new MyLabel(this))
{
ui->setupUi(this);
m->installEventFilter(this);
}
bool Widget::eventFilter(QObject *obj, QEvent *ev)
{
cout<<ev->type()<<endl;
return QWidget::eventFilter(obj,ev);
}
子控件内的关键代码
void MyLabel::mousePressEvent(QMouseEvent *ev)
{
cout<<"label mouse press event"<<endl;
ev->ignore();
}
这个MyLabel就是简单地继承了QLabel并重写了这个mousePressEvent.
运行的结果是,我点击MyLabel时,会打印这个"label mouse press event",说明事件确实发生,并交到了MyLabel对象手上.
但这个过程中,被安装到其上的过滤器eventFilter完全没反应,这是怎么回事?