使用Visual Studio 2012写一个QCustomPlot动态曲线,鼠标悬停可以显示数据
时间: 2024-06-08 19:10:03 浏览: 152
以下是使用Visual Studio 2012编写的一个简单的QCustomPlot动态曲线程序,鼠标悬停时可以显示数据的示例代码:
```cpp
#include "qcustomplot.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建图表控件
QCustomPlot *customPlot = new QCustomPlot();
customPlot->setMinimumSize(640, 480);
customPlot->addGraph();
// 设置坐标轴标签和范围
customPlot->xAxis->setLabel("Time");
customPlot->yAxis->setLabel("Value");
customPlot->xAxis->setRange(0, 10);
customPlot->yAxis->setRange(0, 100);
// 添加鼠标悬停事件处理器
QCPItemTracer *tracer = new QCPItemTracer(customPlot);
customPlot->addItem(tracer);
tracer->setGraph(customPlot->graph());
tracer->setInterpolating(false);
tracer->setStyle(QCPItemTracer::tsCrosshair);
tracer->setPen(QPen(Qt::red));
tracer->setBrush(Qt::NoBrush);
customPlot->setMouseTracking(true);
QObject::connect(customPlot, &QCustomPlot::mouseMove, [=](QMouseEvent *event) {
double x = customPlot->xAxis->pixelToCoord(event->pos().x());
double y = customPlot->yAxis->pixelToCoord(event->pos().y());
tracer->setGraphKey(x);
tracer->updatePosition();
customPlot->replot();
customPlot->setToolTip(QString("(%1, %2)").arg(x).arg(y));
});
// 添加数据
QVector<double> x(101), y(101);
for (int i = 0; i < 101; ++i)
{
x[i] = i / 10.0;
y[i] = qSin(x[i]);
}
customPlot->graph()->setData(x, y);
// 显示图表控件
customPlot->show();
return a.exec();
}
```
在这个例子中,我们使用了QCustomPlot库创建了一个曲线图表控件,并添加了一个鼠标悬停事件处理器。当用户移动鼠标时,我们会跟踪鼠标的位置并显示一个红色的十字线,同时更新曲线上的追踪器位置和图表的工具提示(tooltip)。
可以通过修改添加数据的部分来动态更新曲线的数据,例如使用定时器定时更新曲线的数据。
阅读全文