QT绘制饼图
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绘制饼图的更多相关文章
- Qt之自绘制饼图
1.说明 最近在搞绘图方面的工作,说实话C++的第三方绘图库并不算多,总之我了解的有:qtcharts.ChartDirector.qwt.kdchart和QCustomPlot.这几个库各有利弊. ...
- Html5绘制饼图统计图
这里要介绍的是一个jQuery插件:jquery.easysector.js Html5提供了强大的绘图API,让我们能够使用javascript轻松绘制各种图形.本文将主要讲解使用HTML5绘制饼图 ...
- PHP中用GD绘制饼图
PHP中用GD绘制饼图,绘制的类见代码: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // ...
- 【Highcharts】 绘制饼图和漏斗图
1.outModel类设计 设计outModel类首先研究下Highcharts中series的data数据格式,发现饼图和漏斗图都可以使用这样格式的数据 series: [{ name: 'Uniq ...
- 【带着canvas去流浪】 (3)绘制饼图
目录 一. 任务说明 二. 重点提示 三. 示例代码 四. hover高亮的实现思路 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:< ...
- Python使用Plotly绘图工具,绘制饼图
今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...
- HTML5绘制饼图示例(一)
原文地址:http://www.2cto.com/kf/201108/100251.html HTML5引入Canvas元素,用于图形的绘制,我们可以仅仅基于HTML和JavaScript就能绘制出原 ...
- R绘图 第八篇:绘制饼图(ggplot2)
geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...
- c# 通过.net自带的chart控件绘制饼图pie chart
c# 通过.net自带的chart控件绘制饼图pie chart 需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 具体的实现步骤: > ...
随机推荐
- P3317 [SDOI2014]重建(Matrix-tree+期望)
P3317 [SDOI2014]重建 详情看这位神犇的blog 剩下的注释在code里吧....... #include<iostream> #include<cstdio> ...
- Shell批量启动、关闭tomcat
批量启动tomcat脚本,配置NUM可控制启动数量 #!/bin/bash #identifier CLUSTER_HOME=/opt/cluster-tomcat TNAME=tomcat-- TP ...
- nlp homework 03
NLP Homework 03 --冯煜博 题目描述 (盒子和球模型)假设有3个盒子,每个盒子里装有红白两种颜色的球,盒子里的红白球有下表列出,初始状态分布. 解答 1. 给出HMM模型 \(\mu= ...
- 深度学习demo
1. Stanford Convolutional Neural Network on the MNIST digits dataset http://cs.stanford.edu/people/k ...
- kali linux Burp Suite使用教程
设置Firefox并配置代理 配置Firefox Burp Suite包含拦截代理. 要使用Burp Suite,您必须配置浏览器以通过Burp Suite代理传递其流量. 这对于Firefox来说并 ...
- django基础 -- 2. django初识
一.模块渲染 jinja2 实现简单的字符串替换(动态页面) 1.下载 pip install jinja2 示例 : html文件中 <!DOCTYPE html> <html ...
- 赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】
本文转载自:https://diy.pconline.com.cn/750/7501340.html [PConline 杂谈]从前,大家谈TLC色变:如今,TLC攻占SSD半壁江山.是的,这个世界就 ...
- Elasticsearch 异常处理
cluster_block_exception https://stackoverflow.com/questions/50609417/elasticsearch-error-cluster-blo ...
- oracle 之 如何链接别人电脑的oracle
1.首先确保两台电脑是在同一个局域网内,可以通过cm命令窗口 ping 对方电脑的ID,若是没问题则表示可以连接 2.接下来通过配置来首先连接对方的电脑 其实在后面还有一个是否创建新的额服务名的操作, ...
- RabbitMQ.client消息队列
doc 介绍 分类&&典型应用 中文文档 使用