Curve Tracer
By using QCustomplot to draw a tracer on a 2D image, it is possible to draw a single QCPAxisRect. If using QCPItemStraightLine to draw lines, it is not possible to draw all rows and columns successfully. I hope a skilled technician can provide guidance. VarCurveTracer::VarCurveTracer(QCustomPlot* customplot, QCPAxisRect* rect, QCPGraph* graph, QColor color, QObject* parent) :QObject(parent) ,m_customplot(customplot) ,m_rect(rect) ,m_graph(graph) { if (!m_customplot) { qDebug() setClipAxisRect(m_rect); // 跟踪器样式 m_tracer->setStyle(QCPItemTracer::tsPlus); // 跟踪器的大小 m_tracer->setSize(20); m_tracer->setPen(QPen(Qt::red)); m_tracer->setBrush(Qt::red); m_tracer->position->setTypeX(QCPItemPosition::ptPlotCoords); m_tracer->position->setTypeY(QCPItemPosition::ptPlotCoords); // 绑定曲线,只在曲线的数据点上出现 m_tracer->setGraph(m_graph); // 新建数据点位置显示图标 m_label = new QCPItemText(m_customplot); // 绑定轴矩形,超出轴矩形的部分不会显示 m_label->setClipAxisRect(m_rect); m_label->setPadding(QMargins(3, 3, 3, 3)); // 边框颜色 m_label->setPen(QPen(Qt::black)); // 填充颜色 m_label->setBrush(QBrush(color)); // 根据颜色的亮度值自动翻转字体颜色 if (color.lightness() > 80) { m_label->setColor(Qt::black); } else { m_label->setColor(Qt::white); } m_label->setText(""); m_label->setTextAlignment(Qt::AlignLeft); m_label->setPositionAlignment(Qt::AlignRight); // 图标位置跟随跟踪器tracer变化 m_label->position->setParentAnchor(m_tracer->position); setVisible(false); } class VarCurveTracer : public QObject { Q_OBJECT public: explicit VarCurveTracer(QCustomPlot* customplot, \ QCPAxisRect* rect, \ QCPGraph* graph,\ QColor color, \ QObject* parent = nullptr); ~VarCurveTracer(); void setVisible(bool on); void updateTracerPosition(double key); private: QCustomPlot* m_customplot; QCPItemTracer* m_tracer; // 跟踪的点 QCPItemText* m_label; // 显示的数值 QCPAxisRect* m_rect; QCPGraph* m_graph; };

By using QCustomplot to draw a tracer on a 2D image, it is possible to draw a single QCPAxisRect.
If using QCPItemStraightLine to draw lines, it is not possible to draw all rows and columns successfully. I hope a skilled technician can provide guidance.
VarCurveTracer::VarCurveTracer(QCustomPlot* customplot, QCPAxisRect* rect, QCPGraph* graph, QColor color, QObject* parent)
:QObject(parent)
,m_customplot(customplot)
,m_rect(rect)
,m_graph(graph)
{
if (!m_customplot) {
qDebug() << "m_customplot is null.";
return;
}
// 新建跟踪器
m_tracer = new QCPItemTracer(m_customplot);
// 绑定轴矩形,超出轴矩形的部分不会显示
m_tracer->setClipAxisRect(m_rect);
// 跟踪器样式
m_tracer->setStyle(QCPItemTracer::tsPlus);
// 跟踪器的大小
m_tracer->setSize(20);
m_tracer->setPen(QPen(Qt::red));
m_tracer->setBrush(Qt::red);
m_tracer->position->setTypeX(QCPItemPosition::ptPlotCoords);
m_tracer->position->setTypeY(QCPItemPosition::ptPlotCoords);
// 绑定曲线,只在曲线的数据点上出现
m_tracer->setGraph(m_graph);
// 新建数据点位置显示图标
m_label = new QCPItemText(m_customplot);
// 绑定轴矩形,超出轴矩形的部分不会显示
m_label->setClipAxisRect(m_rect);
m_label->setPadding(QMargins(3, 3, 3, 3));
// 边框颜色
m_label->setPen(QPen(Qt::black));
// 填充颜色
m_label->setBrush(QBrush(color));
// 根据颜色的亮度值自动翻转字体颜色
if (color.lightness() > 80) {
m_label->setColor(Qt::black);
}
else {
m_label->setColor(Qt::white);
}
m_label->setText("");
m_label->setTextAlignment(Qt::AlignLeft);
m_label->setPositionAlignment(Qt::AlignRight);
// 图标位置跟随跟踪器tracer变化
m_label->position->setParentAnchor(m_tracer->position);
setVisible(false);
}
class VarCurveTracer : public QObject
{
Q_OBJECT
public:
explicit VarCurveTracer(QCustomPlot* customplot, \
QCPAxisRect* rect, \
QCPGraph* graph,\
QColor color, \
QObject* parent = nullptr);
~VarCurveTracer();
void setVisible(bool on);
void updateTracerPosition(double key);
private:
QCustomPlot* m_customplot;
QCPItemTracer* m_tracer; // 跟踪的点
QCPItemText* m_label; // 显示的数值
QCPAxisRect* m_rect;
QCPGraph* m_graph;
};