目录
一、代码示例
1.1 绘制两条曲线
- 一、代码示例
- 1.1 绘制两条曲线
- 1.2 mainwindow.h头文件
- 1.3 mainwindow.cpp源文件
- 1.4 重写mouseMoveEvent事件函数
- 二、运行结果
利用QCustomPlot绘制曲线的代码就不过多介绍了,详情可参考:QCustomPlot基础教程(二)——在Qt中绘制多个曲线。 曲线绘制结果如下:
包含一个槽函数,声明两个变量:
public slots:
void mouseMoveEvent(QMouseEvent *event);
private:
QCPItemTracer *tracer;
QCustomPlot *customPlot;
1.3 mainwindow.cpp源文件
生成游标代码如下:
tracer = new QCPItemTracer(customPlot);
//tracer->setInterpolating(false);
tracer->setStyle(QCPItemTracer::tsCircle);
tracer->setPen(QPen(Qt::red));
tracer->setBrush(Qt::red);
tracer->setSize(6);
最后,再加入信号-槽连接语句:
//信号-槽连接语句
connect(customPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMoveEvent(QMouseEvent*)));
1.4 重写mouseMoveEvent事件函数
函数代码如下:
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
QCPGraph *mGraph = customPlot->graph(0);
//将像素点转换成qcustomplot中的坐标值,并通过setGraphKey将锚点值设为真实数据值。tracer->setGraphKey(xAxis->pixelToCoord(event->pos().x()));
int graphCount=2;
//获得鼠标位置处对应的横坐标数据x
double x = customPlot->xAxis->pixelToCoord(event->pos().x());
//遍历曲线
for (int i = 0; i graph(i)->selected())
{
//显示锚点
tracer->setVisible(true);
mGraph = customPlot->graph(i);
tracer->setGraph(mGraph);//将锚点设置到被选中的曲线上
tracer->setGraphKey(x); //将游标横坐标设置成刚获得的横坐标数据x
tracer->setInterpolating(true); //游标的纵坐标可以通过曲线数据线性插值自动获得
tracer->updatePosition(); //使得刚设置游标的横纵坐标位置生效
double xValue = tracer->position->key();
double yValue = tracer->position->value();
//显示tip框
QToolTip::showText(event->globalPos(), tr(
"%1"
""
""
"X: %2" " , " "Y: %3"
""
"").arg(mGraph->name()).arg( QString::number(xValue)).arg(QString::number(yValue)), this, this->rect());
break;
}
else
{
//没有曲线被选中,不显示锚点
tracer->setVisible(false);
}}
//重绘
customPlot->replot();
}
二、运行结果
完整代码可以参考:https://download.csdn.net/download/didi_ya/22331471
参考文章:https://www.cnblogs.com/coldheartx/p/13750363.html
ok,以上便是全部内容了,如果对你有所帮助,记得点个赞哟~