QT版本:QT5.6.1

QT绘制饼图,出问题的代码如下

void DrawPieDialog::paintEvent(QPaintEvent *event)
{
float startAngle=0;
float spanAngle=( (qreal) (sell) / (qreal)(sell+last) ) *360;
QPoint startPt(30,30); //圆心
QRect rect(startPt.x(), startPt.y(), 200, 200);
QPainter p(this);
int arcR = rect.width()/2;
QPainterPath path;
p.setBrush(Qt::green); path.moveTo(startPt.x() + arcR,startPt.y() + arcR); //移动到圆心
path.arcTo(rect,startAngle,spanAngle);
p.drawPath(path); p.setBrush(Qt::red);
path.moveTo(startPt.x() + arcR,startPt.y() + arcR); //移动到圆心
startAngle=spanAngle;
spanAngle=360-startAngle;
path.arcTo(rect,startAngle,spanAngle);
p.drawPath(path); QRect rect2(250,175,20,20);
QRect rect3(250,215,20,20); //为了绘制方块用的变量
//绘制方块
p.setBrush(Qt::green);
p.drawRect(rect2);
p.setBrush(Qt::red);
p.drawRect(rect3);
//绘制文字
p.drawText(QRectF(280,180,100,20),QString("已经销售的占比"));
p.drawText(QRectF(280,220,100,20),QString("未销售的占比")); }

解决办法:

1 使用更高版本的QT版本

 QT5.7以上版本支持QPieSeries + QPieSlice + QChart + QChartView等类,可以直接绘制饼图

2 修改代码如下

void DrawPieDialog::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
float startAngle=0;
float spanAngle=( (qreal) (sell) / (qreal)(sell+last) ) *360; QPoint startPt(30,30); //圆心
QRect rect(startPt.x(), startPt.y(), 200, 200);
int arcR = rect.width()/2;
QList<QColor> colorList; for(int i = 0; i < 2; i++)
{
//生成随机颜色并过滤掉白色
int colorR, colorG, colorB;
while (1)
{
colorR = rand() % 256;
colorG = rand() % 256;
colorB = rand() % 256; if (colorR == 255 && colorG == 255 && colorB == 255)
{
continue;
}
else
{
break;
}
}
QColor color(colorR, colorG, colorB);
colorList.append(color);
painter.setBrush(QBrush(color));
//画扇形
QPainterPath path;
path.moveTo(startPt.x() + arcR,startPt.y() + arcR); //移动到圆心
if(i == 1)
{
startAngle=spanAngle;
spanAngle=360-spanAngle;
}
path.arcTo(rect, startAngle, spanAngle);
painter.drawPath(path);
} //end for
}

 绘图光滑需要设置:

painter.setRenderHint(QPainter::Antialiasing, true);

 效果图如下

3 修改代码如下

参考资料

1 Qt之饼图 https://www.cnblogs.com/xinxue/p/6021873.html

2 Qt4.8.5以上版本绘制饼图 https://blog.csdn.net/Pailugou/article/details/82080829

3 关于QT的QPainterPath::arcTo 详解 https://www.cnblogs.com/yuzhould/p/9132493.html

QT绘制饼图的更多相关文章

  1. Qt之自绘制饼图

    1.说明 最近在搞绘图方面的工作,说实话C++的第三方绘图库并不算多,总之我了解的有:qtcharts.ChartDirector.qwt.kdchart和QCustomPlot.这几个库各有利弊. ...

  2. Html5绘制饼图统计图

    这里要介绍的是一个jQuery插件:jquery.easysector.js Html5提供了强大的绘图API,让我们能够使用javascript轻松绘制各种图形.本文将主要讲解使用HTML5绘制饼图 ...

  3. PHP中用GD绘制饼图

    PHP中用GD绘制饼图,绘制的类见代码: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // ...

  4. 【Highcharts】 绘制饼图和漏斗图

    1.outModel类设计 设计outModel类首先研究下Highcharts中series的data数据格式,发现饼图和漏斗图都可以使用这样格式的数据 series: [{ name: 'Uniq ...

  5. 【带着canvas去流浪】 (3)绘制饼图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四. hover高亮的实现思路 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:< ...

  6. Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  7. HTML5绘制饼图示例(一)

    原文地址:http://www.2cto.com/kf/201108/100251.html HTML5引入Canvas元素,用于图形的绘制,我们可以仅仅基于HTML和JavaScript就能绘制出原 ...

  8. R绘图 第八篇:绘制饼图(ggplot2)

    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...

  9. c# 通过.net自带的chart控件绘制饼图pie chart

    c# 通过.net自带的chart控件绘制饼图pie chart   需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 具体的实现步骤: > ...

随机推荐

  1. Docker学习笔记之在 Windows 和 Mac 中使用 Docker

    0x00 概述 对于开发来说,Windows 和 macOS 是更为常见和常用的系统,所以也很有必要了解在 Windows 和 macOS 中使用 Docker 的方法.很幸运的是,Docker 的官 ...

  2. python的zipfile、tarfile模块

    zipfile.tarfile的用法 先占个位置,后续再实际操作和补充 参考 https://www.cnblogs.com/MnCu8261/p/5494807.html

  3. markdownpad2-注册码-2017-02-23

    MarkdownPad2.5/2 注册码   User: Soar360@live.com 授权: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImD ...

  4. Base64编码为什么会使数据量变大?

    当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据量明显变大,为何呢?这里就得先探究一下什么是Base64编码. Base64编码的思想是是采用64个基 ...

  5. HTML <frame> 标签的 src 属性

    HTML <frame> 标签 实例 src 属性规定在框架中显示的文档的位置: <html> <frameset cols="50%,50%"> ...

  6. Vue学习【第一篇】:Vue初识与指令

    什么是Vue 什么是Vue Vue.js是一个渐进式JavaScript框架它是构建用户界面的JavaScript框架(让它自动生成js,css,html等) 渐进式:vue从小到控制页面中的一个变量 ...

  7. Sublime Text3--安装使用教程资料整理

    Sublime Text快捷键:   Ctrl + ←/→进行逐词移动,相应的,Ctrl + Shift + ←/→进行逐词选择.   Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中 ...

  8. upc组队赛1 闪闪发光 【优先队列】

    闪闪发光 题目描述 一所位于云南昆明的中医药本科院校--云南中医学院. 因为报考某专业的人数骤减,正面临着停招的危机. 其中有九名少女想到一条妙计--成为偶像, 只要她们成为偶像,学校的名气便会增加, ...

  9. 浅谈Java中static关键字、权限修饰符

    1.实例变量:也称非静态成员变量,实例变量前没有static关键字,用来描述同一类事物的公共属性.访问方式:对象名.变量名.实例变量存储在堆区,对象有n个,数据就有n个.实例变量随着对象的创建而创建, ...

  10. Unity3D学习笔记(三十七):顶点偏移和溶解

    顶点偏移 沿向量方向偏移,沿自身坐标系方向偏移 沿法线方向偏移,球体放大,立方体拆分 Shader "Lesson/VFVertOffsetVertex" { Properties ...