PlotView.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #ifndef PLOTVIEW_H
  2. #define PLOTVIEW_H
  3. #include <qcustomplot/qcustomplot.h>
  4. /**
  5. * @例子
  6. * QVector<PlotView::Data> pd;
  7. pd << PlotView::Data { "经典1", 0.6 };
  8. pd << PlotView::Data { "经典2", 0.2 };
  9. pd << PlotView::Data { "经典3", 0.3 };
  10. pd << PlotView::Data { "经典4", 0.61 };
  11. pd << PlotView::Data { "经典5", 0.52 };
  12. pd << PlotView::Data { "经典6", 0.233 };
  13. pd << PlotView::Data { "经典7", 0.16 };
  14. pd << PlotView::Data { "经典8", 0.22 };
  15. pd << PlotView::Data { "经典9", 0.33 };
  16. pd << PlotView::Data { "经典10", 0.161 };
  17. pd << PlotView::Data { "经典11", 0.152 };
  18. pd << PlotView::Data { "经典12", 0.133 };
  19. pd << PlotView::Data { "经典13", 0.36 };
  20. pd << PlotView::Data { "经典14", 0.72 };
  21. pd << PlotView::Data { "经典15", 0.3 };
  22. pd << PlotView::Data { "经典16", 0.861 };
  23. pd << PlotView::Data { "经典17", 0.552 };
  24. pd << PlotView::Data { "经典18", 0.93 };
  25. PlotView *pv = new PlotView(PlotView::Area, pd, "标题");
  26. */
  27. class PlotView : public QCustomPlot
  28. {
  29. Q_OBJECT
  30. public:
  31. enum PlotType
  32. {
  33. Line, // 折线图
  34. HistogramHorizontal, // 横向柱状图
  35. HistogramVertical, // 竖向柱状图
  36. // Pie, // QCustomPlot不支持饼图
  37. Curve, // 曲线图
  38. Area, // 面积图
  39. };
  40. Q_ENUM(PlotType)
  41. struct Data
  42. {
  43. QString name;
  44. double value;
  45. bool operator==(const Data &r) const { return (this->name == r.name) && (this->value == r.value); }
  46. };
  47. explicit PlotView(PlotType t, const QVector<Data> &data, const QString &title = "", QWidget *parent = nullptr);
  48. void updateType(PlotType t);
  49. void updateData(const QVector<Data> &data);
  50. QPixmap toPixmap();
  51. void plot();
  52. signals:
  53. private:
  54. PlotType m_plotType;
  55. QVector<Data> m_sourceData;
  56. QString m_title;
  57. void drawLine();
  58. void drawHistogram(bool horizontal = false);
  59. void drawCurve();
  60. void drawArea();
  61. };
  62. #endif // PLOTVIEW_H