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. 01:adminLTE2基本使用

    1.1 adminLTE介绍 1.adminLTE 介绍 1.基于Bootstrap3高度可定制的响应式管理模板,免去前端架构师大量的js和css的编写 2.adminLTE除了可以使用bootstr ...

  2. sed/awk advance

    $ echo test.file [Group1]cacheways = 19 [Group2]cacheways = 19 $ ls test.sh FILE=test.file2 # Set Gr ...

  3. ldap服务备份与恢复

    备份: cat ldap_backup.sh #!/bin/bash/usr/sbin/slapcat >/S3/openldap/openldap_backup_`date -d " ...

  4. Django使用多数据库

    有些项目可能涉及到使用多个数据库的情况,方法很简单. 1.在settings中设定DATABASE 比如要使用两个数据库: DATABASES = { 'default': { 'NAME': 'ap ...

  5. String的getBytes()方法 以及 new String()

    在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这表示在不同的操作系统下,返回的东西不一样! String.getBytes(Stringdecode) ...

  6. Linux下调整ext3分区大小【转】

    本文转载自:https://blog.csdn.net/cruise_h/article/details/22403529 本文讨论如何再不丢失数据的情况下调整已有ext3分区的大小,包括: 压缩已有 ...

  7. tp剩余未验证内容-3

    为什么有时候会 出现 "上传文件保存错误"? public function save($file, $replace=true){ /* 移动文件 */ if (!move_up ...

  8. 用vim + xdebug 来追踪thinkphp的执行过程

    tree命令的使用几个有实际应用的参数 -a 这是默认的 -d: 只显式目录, 不需要显式目录下的文件 -L: 列出显式的深度. 当前目录下的所有东西为第一级... 在tp下, 有多个Common但是 ...

  9. SpringBoot JDBC 源码分析之——NamedParameterJdbcTemplate 查询数据返回bean对象

    1,NamedParameterJdbcTemplate 查询列表 /***测试***/ public void queyBeanTest(){ String s = "select * f ...

  10. pitch, yaw, roll

    在航空中,pitch, yaw, roll下图所示. pitch是围绕X轴旋转,也叫做俯仰角. yaw是围绕Y轴旋转,也叫偏航角. roll是围绕Z轴旋转,也叫翻滚角.