chartline.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. void setChartColors(const QColor& color);
  34. protected:
  35. void resizeEvent(QResizeEvent *event) override;
  36. private:
  37. QChart *m_chart;
  38. QValueAxis *m_axisX;
  39. QValueAxis *m_axisY;
  40. // 统一的折线系列
  41. QLineSeries *m_lineSeries;
  42. // 存储所有数据系列信息
  43. QMap<QString, DataSeries> m_dataSeriesMap;
  44. // 存储每个数据系列对应的散点系列
  45. QMap<QString, QScatterSeries*> m_scatterSeriesMap;
  46. // 存储每个系列的自定义图标
  47. QMap<QString, QList<QGraphicsPixmapItem*>> m_pixmapItemsMap;
  48. // 重新构建折线数据
  49. void rebuildLineSeries();
  50. // 更新图标位置
  51. void updateMarkers();
  52. };
  53. #endif // CHARTLINE_H