创建了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 );