#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