#ifndef VPIECHART_H #define VPIECHART_H /** * 饼图控件 * 1:可设置文字颜色 * 2:可设置边框颜色 * 3:可设置颜色集合 * 4:可设置某个区域是否弹出 * 5:可设置是否显示百分比 */ #include "Common.h" #include "VControlObject.h" // 扩展属性的组名 #define PIE_PROPERTY_EX_NAME "饼形图" #define PIE_PROPERTY_EX_REFRESHLINK_NAME "索引链接" #define PIE_PROPERTY_EX_GROUP_NAME "分块信息" #define PIE_PROPERTY_EX_SUBGROUP_NAME "分块" #define PIE_PROPERTY_EX_VALUE_NAME "块名" #define PIE_PROPERTY_EX_COLOR_NAME "分块颜色" #define PIE_PROPERTY_EX_LINK_NAME "数据链接" // 块数的属性名称 #define PIE_SLICE_COUNT_NAME "sliceCount" // 饼图属性子分组编号(Pie目前只有一个扩展属性组) #define GROUP_INDEX_PIE 0 /// /// 饼形图的封装类 /// class VPieChart : public QWidget, public VControlObject { Q_OBJECT Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry) Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor) Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor) Q_PROPERTY(int sliceCount READ getSliceCount WRITE setSliceCount) public: VPieChart( QWidget* parent, const QPoint& pos, const QSize& size, CONTROL_PROPERTY* pProperty = nullptr, CONTROL_PROPERTY_EX* pPropertyEx = nullptr ); ~VPieChart(); public: //设置文字颜色+边框颜色 void setTextColor(const QColor& textColor); QColor getTextColor() const; // 设置边框颜色 void setBorderColor(const QColor& borderColor); QColor getBorderColor() const; // 设置块数 void setSliceCount(const int& count); // 获取当前块数 int getSliceCount(); // 设置分块文字 void updateSliceTitle(const QString& newValue, const int nIndex); // 设置分块颜色 void updateSliceColor(QColor newValue, const int nIndex); // 设置分块数值 void updateSliceValue(const int& newValue, const int nIndex); // 更新块属性数量(虚函数) virtual void updateExPropertyCount(const int fixCount, const QString& strPropName); // 修改扩展属性(虚函数) virtual void changeExProperties(QString strValueTitle, const QVariant& newValue); protected: void paintEvent(QPaintEvent *); void drawPie(QPainter *painter); private: bool explodedAll; //是否全部展开 int explodedIndex; //展开的索引 bool showPercent; //是否显示百分比 double holeSize; //空心占比 QColor m_TextColor; // 文字颜色 QColor m_BorderColor; // 边框颜色 QVector m_defaultColors; // 颜色集合 // QVector m_Titles; // 标签集合 QVector m_Values; // 值集合(如果是处于预览状态,则数值全为1) private: // 获取总值 double getSumValue(); // 根据偏移值获取偏移点坐标 QPoint getOffsetPoint(double angel, int offset = 6); // 初始化扩展属性 void initPropertyEx(); // 初始化UI风格 void initStyle(); //// 2021-12-30修改,设置饼图的预览风格(每块均等分,颜色随机) //void previewPie(); // 初始化一个扩展属性组 void initSubGroup(PROPERTY_EX_SUBGROUP& subGroup, int nIndex, int nSubGroupID); // 设置颜色集合 void setColors(const QVector& colors); //初始化饼图 void initPie(); ////添加饼图数据 //void appendPie(const QString &label, double value, const QString &tip = ""); ////设置数据 //void setDataPie(); //重新设置百分比 void loadPercent(); ////清除饼图 //void clearPie(); //设置空心占比 void setHoleSize(double holeSize); public Q_SLOTS: // 设置是否全部展开+展开的索引 void setExplodedAll(bool explodedAll); void setExplodedIndex(int index); // 设置是否启用默认颜色 void setDefaultColor(bool defaultColor); }; #endif // VPIECHART_H