CustomPie.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #ifndef CUSTOMPIE_H
  2. #define CUSTOMPIE_H
  3. /**
  4. * 自定义饼图控件 整理:feiyangqingyun(QQ:517216493) 2019-5-21
  5. * 1:可设置文字颜色
  6. * 2:可设置边框颜色
  7. * 3:可设置颜色集合
  8. * 4:可设置某个区域是否弹出
  9. * 5:可设置是否显示百分比
  10. */
  11. #include <QWidget>
  12. class CustomPie : public QWidget
  13. {
  14. Q_OBJECT
  15. Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
  16. Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor)
  17. public:
  18. CustomPie(QWidget *parent = 0);
  19. ~CustomPie();
  20. protected:
  21. void paintEvent(QPaintEvent *);
  22. void drawPie(QPainter *painter);
  23. private:
  24. bool explodedAll; // 是否全部展开
  25. int explodedIndex; // 展开的索引
  26. bool showPercent; // 是否显示百分比
  27. double holeSize; // 空心占比
  28. QColor textColor; // 文字颜色
  29. QColor borderColor; // 边框颜色
  30. QList<QColor> colors; // 颜色集合
  31. QList<QString> labels; // 标签集合
  32. QList<double> values; // 值集合
  33. private:
  34. // 获取总值
  35. double getSumValue();
  36. // 根据偏移值获取偏移点坐标
  37. QPoint getOffsetPoint(double angel, int offset = 6);
  38. public:
  39. QColor getTextColor() const;
  40. QColor getBorderColor() const;
  41. public Q_SLOTS:
  42. // 设置是否全部展开+展开的索引
  43. void setExplodedAll(bool explodedAll);
  44. void setExplodedIndex(int index);
  45. // 设置是否启用默认颜色
  46. void setDefaultColor(bool defaultColor);
  47. // 设置文字颜色+边框颜色
  48. void setTextColor(const QColor &textColor);
  49. void setBorderColor(const QColor &borderColor);
  50. // 设置颜色集合
  51. void setColors(const QList<QColor> &colors);
  52. // 初始化饼图
  53. void initPie();
  54. // 添加饼图数据
  55. void appendPie(const QString &label, double value, const QString &tip = "");
  56. // 设置数据
  57. void setDataPie();
  58. // 重新设置百分比
  59. void loadPercent();
  60. // 清除饼图
  61. void clearPie();
  62. // 设置空心占比
  63. void setHoleSize(double holeSize);
  64. };
  65. #endif // CUSTOMPIE_H