一、前言
上次在写可视化数据大屏电子看板项目的时候,为了逐步移除对QChart的依赖(主要是因为QChart真的太垃圾了,是所有Qt的模块中源码最烂的一个,看过源码的人没有一个不吐槽,不仅不支持10W级别的数据量曲线展示,居然一个饼图控件,文字部分的展示还用QLabel来显示的,这么低效率的方式都有),起初曲线图和柱状图等都用QCustomPlot替代了,就剩一个饼图需要自己用无敌的QPainter来绘制了,绘制对应的背景区域难度不大,稍微会用QPainter的人都可以实现,用的就是drawPie绘制即可,关键是如何在自己所在的区域绘制对应的文字和百分比,这个需要找到对应区域,然后找到合理的位置摆放文字,这个可能就需要用到一点数学知识了,从圆中心开始,给定对应的角度,对应的偏离值,计算偏离值对应的中心点坐标,此坐标作为绘制文字区域的中心,然后四周扩散一定的距离即可。
二、实现的功能
1:可设置文字颜色
2:可设置边框颜色
3:可设置颜色集合
4:可设置某个区域是否弹出
5:可设置是否显示百分比
头文件代码
#ifndef CUSTOMPIE_H
#define CUSTOMPIE_H
/**
* 自定义饼图控件 整理:feiyangqingyun(QQ:517216493) 2019-5-21
* 1:可设置文字颜色
* 2:可设置边框颜色
* 3:可设置颜色集合
* 4:可设置某个区域是否弹出
* 5:可设置是否显示百分比
*/
#include <QWidget>
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif
class QDESIGNER_WIDGET_EXPORT CustomPie : public QWidget
#else
class CustomPie : public QWidget
#endif
{
Q_OBJECT
Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderCol