#ifndef CHARTLINE_H #define CHARTLINE_H #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> #include <QtCharts/QScatterSeries> #include <QtCharts/QValueAxis> #include <QMap> #include <QPixmap> #include <QList> #include <QGraphicsPixmapItem> QT_CHARTS_USE_NAMESPACE struct DataSeries { QString seriesName; QColor lineColor; QPixmap markerIcon; QList<QPointF> data; }; class ChartLine : public QChartView { Q_OBJECT public: explicit ChartLine(QWidget *parent = nullptr); // 设置图表标题和轴标签 void setChartLabels(const QString &chartTitle, const QString &xAxisLabel, const QString &yAxisLabel); // 添加一个数据系列 void addDataSeries(const DataSeries &series); // 移除一个数据系列 void removeDataSeries(const QString &seriesName); // 更新指定数据系列的数据 void updateDataSeries(const QString &seriesName, const QList<QPointF> &data); protected: void resizeEvent(QResizeEvent *event) override; private: QChart *m_chart; QValueAxis *m_axisX; QValueAxis *m_axisY; // 统一的折线系列 QLineSeries *m_lineSeries; // 存储所有数据系列信息 QMap<QString, DataSeries> m_dataSeriesMap; // 存储每个数据系列对应的散点系列 QMap<QString, QScatterSeries*> m_scatterSeriesMap; // 存储每个系列的自定义图标 QMap<QString, QList<QGraphicsPixmapItem*>> m_pixmapItemsMap; // 重新构建折线数据 void rebuildLineSeries(); // 更新图标位置 void updateMarkers(); }; #endif // CHARTLINE_H