QCPItemText类型的对象事件过滤器监听失败

创建了QCPItemText类型的对象tracerLabel,用事件过滤器监听tracerLabel对象的事件。为了验证可行性,固定了tracerLabel的位置和内容,但是无法进入eventFilter函数(qDebug()<<"000";)没有被运行过,代码如下:


MyQCustomPlot::MyQCustomPlot(QWidget *parent) : QCustomPlot(parent)
{
    this->setFixedSize(800,400);
    //*******
    //生成游标
    tracer = new QCPItemTracer(this); //生成游标
    tracer->setPen(QPen(Qt::white));//圆圈轮廓颜色
    tracer->setBrush(QBrush(Qt::black));//圆圈圈内颜色
    tracer->setStyle(QCPItemTracer::tsCircle);//圆圈
    tracer->setSize(8);//设置大小
    tracer->setSelectable(1);
 
    //******
    //游标说明
    tracerLabel = new QCPItemText(this); //生成游标说明
    tracerLabel->setLayer("overlay");//设置图层为overlay,因为需要频繁刷新
    tracerLabel->setPositionAlignment(Qt::AlignLeft | Qt::AlignTop);//左上
    //tracerLabel->position->setParentAnchor(tracer->position);//将游标说明锚固在tracer位置处,实现自动跟随
    tracerLabel->setColor(QColor(22, 161, 255));
    tracerLabel->setBrush(QColor(250,250,255));
    tracerLabel->setPadding(QMargins(3,3,3,3));
    tracerLabel->setPen(QPen(QColor(130, 130, 130), 1, Qt::DotLine));//设置游标说明颜色
    tracerLabel->setSelectable(1);
    tracerLabel->position->setCoords(3,5);
    tracerLabel->setText("444");
 
    tracerLabel->installEventFilter(this);
}
 
bool MyQCustomPlot::eventFilter(QObject *obj, QEvent *event)
{
    qDebug()<<"000";
    if(obj==tracerLabel)
    {
        qDebug()<<"111";
        if(event->type()==QEvent::MouseButtonPress)
        {
            QMouseEvent *mouseEvent = (QMouseEvent *)event;
            if(mouseEvent->buttons()&Qt::LeftButton)
            {
                qDebug()<<"222";
            }
            return true;
        }
        if(event->type()==QEvent::MouseMove)
        {
            //QMouseEvent *mouseEvent = (QMouseEvent *)event;
            qDebug()<<"333";
            return true;
        }
    }
    return MyQCustomPlot::eventFilter(obj,event);
}
 

感谢邀请,您使用的QT是哪个版本?

你是不是在.cpp文件种没有加入 这个

 #include<QEvent >

应该用qApp->installEventFilter( this );