返回
**点阵的实现**
Qt QCustomPlot 实现点状网格线并拾取曲线坐标点
前端
2024-02-19 00:24:41
**点阵的实现**
第一版本,使用 QCPItemLine 项
// 创建一个新的 QCPItemLine 对象
QCPItemLine *line = new QCPItemLine(plot);
// 设置线型、颜色和宽度
line->setPen(QPen(Qt::red, 2));
// 设置线的起点和终点
line->setLine(QPointF(0, 0), QPointF(100, 100));
// 将线添加到绘图中
plot->addItem(line);
第二版本,使用 QCPGraph
// 创建一个新的 QCPGraph 对象
QCPGraph *graph = new QCPGraph(plot);
// 设置线的颜色和宽度
graph->setPen(QPen(Qt::red, 2));
// 添加数据点
graph->addData(0, 0);
graph->addData(100, 100);
// 将线添加到绘图中
plot->addGraph(graph);
曲线坐标点拾取
// 启用鼠标追踪
plot->setMouseTracking(true);
// 连接鼠标移动事件的信号槽
connect(plot, SIGNAL(mouseMove(QMouseEvent *)), this, SLOT(onPlotMouseMove(QMouseEvent *)));
// 在鼠标移动时触发槽函数
void onPlotMouseMove(QMouseEvent *event)
{
// 获取鼠标在绘图中的位置
QPointF mousePos = plot->mapToView(event->pos());
// 遍历曲线上的所有数据点
for (int i = 0; i < graph->dataCount(); i++)
{
// 获取数据点的坐标
QPointF dataPoint = graph->dataMainValue(i);
// 计算鼠标位置和数据点之间的距离
double distance = sqrt(pow(mousePos.x() - dataPoint.x(), 2) + pow(mousePos.y() - dataPoint.y(), 2));
// 如果距离小于某个阈值,则认为鼠标悬停在数据点上
if (distance < 10)
{
// 显示数据点的坐标
qDebug() << "X: " << dataPoint.x() << ", Y: " << dataPoint.y();
// 改变数据点的颜色,以示强调
graph->setPen(QPen(Qt::green, 2));
}
else
{
// 重置数据点的颜色
graph->setPen(QPen(Qt::red, 2));
}
}
}
通过以上代码,即可实现点状网格线和曲线坐标点拾取的功能,从而增强 Qt绘图的交互性和可视化效果。