VPieChart.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #ifndef VPIECHART_H
  2. #define VPIECHART_H
  3. /**
  4. * 饼图控件
  5. * 1:可设置文字颜色
  6. * 2:可设置边框颜色
  7. * 3:可设置颜色集合
  8. * 4:可设置某个区域是否弹出
  9. * 5:可设置是否显示百分比
  10. */
  11. #include "Common.h"
  12. #include "VControlObject.h"
  13. // 扩展属性的组名
  14. #define PIE_PROPERTY_EX_NAME "饼形图"
  15. #define PIE_PROPERTY_EX_REFRESHLINK_NAME "索引链接"
  16. #define PIE_PROPERTY_EX_GROUP_NAME "分块信息"
  17. #define PIE_PROPERTY_EX_SUBGROUP_NAME "分块"
  18. #define PIE_PROPERTY_EX_VALUE_NAME "块名"
  19. #define PIE_PROPERTY_EX_COLOR_NAME "分块颜色"
  20. #define PIE_PROPERTY_EX_LINK_NAME "数据链接"
  21. // 块数的属性名称
  22. #define PIE_SLICE_COUNT_NAME "sliceCount"
  23. // 饼图属性子分组编号(Pie目前只有一个扩展属性组)
  24. #define GROUP_INDEX_PIE 0
  25. /// <summary>
  26. /// 饼形图的封装类
  27. /// </summary>
  28. class VPieChart : public QWidget, public VControlObject
  29. {
  30. Q_OBJECT
  31. Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
  32. Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
  33. Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor)
  34. Q_PROPERTY(int sliceCount READ getSliceCount WRITE setSliceCount)
  35. public:
  36. VPieChart(
  37. QWidget* parent,
  38. const QPoint& pos,
  39. const QSize& size,
  40. CONTROL_PROPERTY* pProperty = nullptr,
  41. CONTROL_PROPERTY_EX* pPropertyEx = nullptr
  42. );
  43. ~VPieChart();
  44. public:
  45. //设置文字颜色+边框颜色
  46. void setTextColor(const QColor& textColor);
  47. QColor getTextColor() const;
  48. // 设置边框颜色
  49. void setBorderColor(const QColor& borderColor);
  50. QColor getBorderColor() const;
  51. // 设置块数
  52. void setSliceCount(const int& count);
  53. // 获取当前块数
  54. int getSliceCount();
  55. // 设置分块文字
  56. void updateSliceTitle(const QString& newValue, const int nIndex);
  57. // 设置分块颜色
  58. void updateSliceColor(QColor newValue, const int nIndex);
  59. // 设置分块数值
  60. void updateSliceValue(const int& newValue, const int nIndex);
  61. // 更新块属性数量(虚函数)
  62. virtual void updateExPropertyCount(const int fixCount, const QString& strPropName);
  63. // 修改扩展属性(虚函数)
  64. virtual void changeExProperties(QString strValueTitle, const QVariant& newValue);
  65. protected:
  66. void paintEvent(QPaintEvent *);
  67. void drawPie(QPainter *painter);
  68. private:
  69. bool explodedAll; //是否全部展开
  70. int explodedIndex; //展开的索引
  71. bool showPercent; //是否显示百分比
  72. double holeSize; //空心占比
  73. QColor m_TextColor; // 文字颜色
  74. QColor m_BorderColor; // 边框颜色
  75. QVector<QColor> m_defaultColors; // 颜色集合
  76. // QVector<QString> m_Titles; // 标签集合
  77. QVector<double> m_Values; // 值集合(如果是处于预览状态,则数值全为1)
  78. private:
  79. // 获取总值
  80. double getSumValue();
  81. // 根据偏移值获取偏移点坐标
  82. QPoint getOffsetPoint(double angel, int offset = 6);
  83. // 初始化扩展属性
  84. void initPropertyEx();
  85. // 初始化UI风格
  86. void initStyle();
  87. //// 2021-12-30修改,设置饼图的预览风格(每块均等分,颜色随机)
  88. //void previewPie();
  89. // 初始化一个扩展属性组
  90. void initSubGroup(PROPERTY_EX_SUBGROUP& subGroup, int nIndex, int nSubGroupID);
  91. // 设置颜色集合
  92. void setColors(const QVector<QColor>& colors);
  93. //初始化饼图
  94. void initPie();
  95. ////添加饼图数据
  96. //void appendPie(const QString &label, double value, const QString &tip = "");
  97. ////设置数据
  98. //void setDataPie();
  99. //重新设置百分比
  100. void loadPercent();
  101. ////清除饼图
  102. //void clearPie();
  103. //设置空心占比
  104. void setHoleSize(double holeSize);
  105. public Q_SLOTS:
  106. // 设置是否全部展开+展开的索引
  107. void setExplodedAll(bool explodedAll);
  108. void setExplodedIndex(int index);
  109. // 设置是否启用默认颜色
  110. void setDefaultColor(bool defaultColor);
  111. };
  112. #endif // VPIECHART_H