首页| 论坛| 消息

标题:Qt编写自定义控件20-自定义饼图
作者:liudianwu
日期:2019-06-03 23:21
内容:

一、前言
上次在写可视化数据大屏电子看板项目的时候,为了逐步移除对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
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include
#else
#include
#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 setBorderColor)
public:
CustomPie(QWidget *parent = 0);
~CustomPie();
protected:
void paintEvent(QPaintEvent *);
void drawPie(QPainter *painter);
private:
bool exp ..


#1 [青春的年代 06-04 03:42]
这个不错,以后多来些这种文章
#2 [anxornot 06-04 08:24]

#3 [九重水 06-04 09:17]
跟我干就不用天天写代码这么辛苦了。
#4 [305750665 06-04 09:29]

#5 回 九重水 的帖子 [青春的年代 06-04 10:18]
九重水:跟我干就不用天天写代码这么辛苦了。  (2019-06-04 09:17) 
老刘说我只想挣点小钱,我要有那么高的觉悟我就不学qt了

回复 发表
主题 版块