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. P3317 [SDOI2014]重建(Matrix-tree+期望)

    P3317 [SDOI2014]重建 详情看这位神犇的blog 剩下的注释在code里吧....... #include<iostream> #include<cstdio> ...

  2. Shell批量启动、关闭tomcat

    批量启动tomcat脚本,配置NUM可控制启动数量 #!/bin/bash #identifier CLUSTER_HOME=/opt/cluster-tomcat TNAME=tomcat-- TP ...

  3. nlp homework 03

    NLP Homework 03 --冯煜博 题目描述 (盒子和球模型)假设有3个盒子,每个盒子里装有红白两种颜色的球,盒子里的红白球有下表列出,初始状态分布. 解答 1. 给出HMM模型 \(\mu= ...

  4. 深度学习demo

    1. Stanford Convolutional Neural Network on the MNIST digits dataset http://cs.stanford.edu/people/k ...

  5. kali linux Burp Suite使用教程

    设置Firefox并配置代理 配置Firefox Burp Suite包含拦截代理. 要使用Burp Suite,您必须配置浏览器以通过Burp Suite代理传递其流量. 这对于Firefox来说并 ...

  6. django基础 -- 2. django初识

    一.模块渲染  jinja2 实现简单的字符串替换(动态页面) 1.下载 pip install jinja2 示例 : html文件中 <!DOCTYPE html> <html ...

  7. 赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】

    本文转载自:https://diy.pconline.com.cn/750/7501340.html [PConline 杂谈]从前,大家谈TLC色变:如今,TLC攻占SSD半壁江山.是的,这个世界就 ...

  8. Elasticsearch 异常处理

    cluster_block_exception https://stackoverflow.com/questions/50609417/elasticsearch-error-cluster-blo ...

  9. oracle 之 如何链接别人电脑的oracle

    1.首先确保两台电脑是在同一个局域网内,可以通过cm命令窗口 ping 对方电脑的ID,若是没问题则表示可以连接 2.接下来通过配置来首先连接对方的电脑 其实在后面还有一个是否创建新的额服务名的操作, ...

  10. RabbitMQ.client消息队列

    doc 介绍 分类&&典型应用 中文文档 使用