chartline.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef CHARTLINE_H
  2. #define CHARTLINE_H
  3. #include <QtCharts/QChartView>
  4. #include <QtCharts/QLineSeries>
  5. #include <QtCharts/QScatterSeries>
  6. #include <QtCharts/QValueAxis>
  7. #include <QMap>
  8. #include <QPixmap>
  9. #include <QList>
  10. #include <QGraphicsPixmapItem>
  11. QT_CHARTS_USE_NAMESPACE
  12. struct DataSeries {
  13. QString seriesName;
  14. QColor lineColor;
  15. QPixmap markerIcon;
  16. QList<QPointF> data;
  17. };
  18. class ChartLine : public QChartView
  19. {
  20. Q_OBJECT
  21. public:
  22. explicit ChartLine(QWidget *parent = nullptr);
  23. // 设置图表标题和轴标签
  24. void setChartLabels(const QString &chartTitle,
  25. const QString &xAxisLabel,
  26. const QString &yAxisLabel);
  27. // 添加一个数据系列
  28. void addDataSeries(const DataSeries &series);
  29. // 移除一个数据系列
  30. void removeDataSeries(const QString &seriesName);
  31. // 更新指定数据系列的数据
  32. void updateDataSeries(const QString &seriesName, const QList<QPointF> &data);
  33. protected:
  34. void resizeEvent(QResizeEvent *event) override;
  35. private:
  36. QChart *m_chart;
  37. QValueAxis *m_axisX;
  38. QValueAxis *m_axisY;
  39. // 统一的折线系列
  40. QLineSeries *m_lineSeries;
  41. // 存储所有数据系列信息
  42. QMap<QString, DataSeries> m_dataSeriesMap;
  43. // 存储每个数据系列对应的散点系列
  44. QMap<QString, QScatterSeries*> m_scatterSeriesMap;
  45. // 存储每个系列的自定义图标
  46. QMap<QString, QList<QGraphicsPixmapItem*>> m_pixmapItemsMap;
  47. // 重新构建折线数据
  48. void rebuildLineSeries();
  49. // 更新图标位置
  50. void updateMarkers();
  51. };
  52. #endif // CHARTLINE_H