VWaveChart.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #ifndef WAVECHART_H
  2. #define WAVECHART_H
  3. /**
  4. * 曲线图表控件
  5. * 1:可设置间隔
  6. * 2:可设置标题
  7. * 3:可设置是否显示横线及坐标点
  8. * 4:可设置背景色文字颜色
  9. * 5:可设置范围值及x轴y轴步长
  10. * 6:暂时不支持最小值小于0的数据
  11. */
  12. #include "Common.h"
  13. #include "VControlObject.h"
  14. class SmoothCurveCreator
  15. {
  16. public:
  17. static QPainterPath createSmoothCurve(const QVector<QPointF>& points);
  18. private:
  19. static void calculateFirstControlPoints(double*& result, const double* rhs, int n);
  20. static void calculateControlPoints(const QVector<QPointF>& knots, QVector<QPointF>* firstControlPoints, QVector<QPointF>* secondControlPoints);
  21. };
  22. /// <summary>
  23. /// 曲线图的封装类
  24. /// </summary>
  25. class VWaveChart : public QWidget, public VControlObject
  26. {
  27. Q_OBJECT
  28. Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
  29. Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
  30. Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
  31. Q_PROPERTY(double xStep READ getXStep WRITE setXStep)
  32. Q_PROPERTY(double yStep READ getYStep WRITE setYStep)
  33. Q_PROPERTY(double space READ getSpace WRITE setSpace)
  34. Q_PROPERTY(QString title READ getTitle WRITE setTitle)
  35. Q_PROPERTY(bool smooth READ getSmooth WRITE setSmooth)
  36. Q_PROPERTY(bool showHLine READ getShowHLine WRITE setShowHLine)
  37. Q_PROPERTY(bool showPoint READ getShowPoint WRITE setShowPoint)
  38. Q_PROPERTY(bool showPointBg READ getShowPointBg WRITE setShowPointBg)
  39. Q_PROPERTY(QColor bgColorStart READ getBgColorStart WRITE setBgColorStart)
  40. Q_PROPERTY(QColor bgColorEnd READ getBgColorEnd WRITE setBgColorEnd)
  41. Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
  42. Q_PROPERTY(QColor pointColor READ getPointColor WRITE setPointColor)
  43. public:
  44. explicit VWaveChart(
  45. QWidget* parent,
  46. const QPoint& pos,
  47. const QSize& size,
  48. CONTROL_PROPERTY* pProperty = nullptr
  49. );
  50. protected:
  51. void paintEvent(QPaintEvent *);
  52. void drawBg(QPainter *painter);
  53. void drawBox(QPainter *painter);
  54. void drawText(QPainter *painter);
  55. void drawTitle(QPainter *painter);
  56. void drawPoint(QPainter *painter);
  57. private slots:
  58. void updateData();
  59. private:
  60. QRectF pointRect; //绘制数据区域
  61. QVector<double> listData; //数据集合
  62. double minValue; //最小值
  63. double maxValue; //最大值
  64. double xStep; //x轴步长
  65. double yStep; //y轴步长
  66. double space; //间隔
  67. QString title; //标题
  68. bool smooth; //是否平滑
  69. bool showHLine; //是否显示横线
  70. bool showPoint; //是否显示坐标点
  71. bool showPointBg; //是否显示坐标背景
  72. QColor bgColorStart; //背景渐变开始颜色
  73. QColor bgColorEnd; //背景渐变结束颜色
  74. QColor textColor; //文字颜色
  75. QColor pointColor; //坐标点颜色
  76. public:
  77. double getMinValue() const;
  78. double getMaxValue() const;
  79. double getXStep() const;
  80. double getYStep() const;
  81. double getSpace() const;
  82. QString getTitle() const;
  83. bool getSmooth() const;
  84. bool getShowHLine() const;
  85. bool getShowPoint() const;
  86. bool getShowPointBg() const;
  87. QColor getBgColorStart() const;
  88. QColor getBgColorEnd() const;
  89. QColor getTextColor() const;
  90. QColor getPointColor() const;
  91. QSize sizeHint() const;
  92. QSize minimumSizeHint() const;
  93. public Q_SLOTS:
  94. //添加和设置数据数据
  95. void addData(double data);
  96. void setData(QVector<double> data);
  97. void clearData();
  98. //设置范围值及步长
  99. void setMinValue(double minValue);
  100. void setMaxValue(double maxValue);
  101. void setXStep(double xStep);
  102. void setYStep(double yStep);
  103. //设置间隔
  104. void setSpace(double space);
  105. //设置标题
  106. void setTitle(const QString &title);
  107. //设置是否平滑曲线
  108. void setSmooth(bool smooth);
  109. //设置显示横线
  110. void setShowHLine(bool showHLine);
  111. //设置显示坐标点
  112. void setShowPoint(bool showPoint);
  113. //设置显示坐标背景
  114. void setShowPointBg(bool showPointBg);
  115. //设置颜色
  116. void setBgColorStart(const QColor &bgColorStart);
  117. void setBgColorEnd(const QColor &bgColorEnd);
  118. void setTextColor(const QColor &textColor);
  119. void setPointColor(const QColor &pointColor);
  120. };
  121. #endif // WAVECHART_H