• 23845阅读
  • 31回复

Qt绘制三维图形饼图 [复制链接]

上一主题 下一主题
离线robertkun
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-13
— 本帖被 XChinux 执行加亮操作(2016-04-23) —
  1. void aaq::paintEvent( QPaintEvent* ev )
  2. {
  3.     QPainter painter(this);
  4.     // 去除画笔
  5.     painter.setPen(Qt::NoPen);
  6.     // 设置反锯齿
  7.     painter.setRenderHint(QPainter::Antialiasing);
  8.     //******************************************** 圆饼图 *****************************************//
  9.     if(1)
  10.     {
  11.         // 顶层圆面
  12.         QRectF rect_top(10.0, 20.0, 280.0, 160.0);
  13.         // 底层圆面
  14.         QRectF rect_bottom(10.0, 60.0, 280.0, 160.0);
  15.         // 中间矩形
  16.         QRectF rect_midd(10.0, 100.0, 280.0, 40.0);
  17.         // 扇形起始角度
  18.         int startAngle = 230 * 16;
  19.         // 扇形覆盖范围
  20.         int spanAngle = 60 * 16;
  21.         painter.setBrush(QColor(97,35,35,255));
  22.         // 绘制底层圆面
  23.         painter.drawEllipse(rect_bottom);
  24.         // 绘制中间矩形
  25.         painter.drawRect(rect_midd);
  26.         painter.setBrush(QColor(Qt::darkYellow));
  27.         // 绘制底层扇形
  28.         painter.drawPie(rect_bottom, startAngle, spanAngle);
  29.         // 扇形的弦与弧的交点
  30.         double pi = 3.1415926;
  31.         double dx1 = rect_top.width() * 0.5 * cos(230 * pi / 180);
  32.         double dy1 = rect_top.height() * 0.5 * sin(230 * pi / 180);
  33.         double dx2 = rect_top.width() * 0.5 * cos(290 * pi / 180);
  34.         double dy2 = rect_top.height() * 0.5 * sin(290 * pi / 180);
  35.         // 求交点的坐标值
  36.         QPointF posBackCenter = QPointF(rect_top.center());
  37.         double dX1 = posBackCenter.x() + dx1 + 0.5;
  38.         double dY1 = posBackCenter.y() - dy1 + 0.5;
  39.         double dX2 = posBackCenter.x() + dx2 + 0.5;
  40.         double dY2 = posBackCenter.y() - dy2 + 0.5;
  41.         // 记录交点
  42.         QPointF topLeft = QPointF(dX1, dY1);
  43.         QPointF bottomRight = QPointF(dX2, dY2) + QPointF(0,40);
  44.         QPointF bottomLeft = topLeft + QPointF(0,40);
  45.         painter.setBrush(QColor(Qt::darkYellow));
  46.         // 绘制连接扇形的区域
  47.         QPolygonF path;
  48.         path << topLeft << QPointF(dX2,dY2) << bottomRight << bottomLeft;
  49.         painter.drawPolygon(path);
  50.         // 绘制顶层圆面
  51.         painter.setBrush(QColor(156,56,56,255));
  52.         painter.drawEllipse(rect_top);
  53.         // 绘制顶层扇形
  54.         painter.setBrush(QColor(Qt::yellow));
  55.         painter.drawPie(rect_top, startAngle, spanAngle);
  56.     }
  57.     QWidget::paintEvent(ev);
  58. }


工作中偶尔遇到了,觉得挺好玩,记录一下.
希望可以帮到有需要的朋友们..

3条评分好评度+1贡献值+1金钱+10
巫添良 好评度 +1 - 2020-05-30
巫添良 贡献值 +1 - 2020-05-30
巫添良 金钱 +10 - 2020-05-30
                                              简单的生活使人快乐!
离线ppdayz

只看该作者 1楼 发表于: 2013-03-13
感谢楼主分享,mark 备用
离线XChinux

只看该作者 2楼 发表于: 2013-03-13
顶楼主
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yzcx
只看该作者 3楼 发表于: 2013-03-14
我下了了,按说明编了,为什么我收不到任何数据
离线robertkun

只看该作者 4楼 发表于: 2013-03-14
引用第3楼yzcx于2013-03-14 15:33发表的  :
我下了了,按说明编了,为什么我收不到任何数据



看一下是不是把函数搞错了??
void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected]



                                              简单的生活使人快乐!
离线codercoder
只看该作者 5楼 发表于: 2013-04-04
mark一下,备不时之用
离线weiweiqiao

只看该作者 6楼 发表于: 2013-04-11
thank you for sharing
Jobs Insanely Great.
离线toby520

只看该作者 7楼 发表于: 2013-04-18
收藏,有空研究下
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线share_idea

只看该作者 8楼 发表于: 2013-04-23
不错
离线o7ouro

只看该作者 9楼 发表于: 2013-04-24
mark一下
离线neil-wen

只看该作者 10楼 发表于: 2013-04-26
^_^   收藏了  ~~    
离线tompsontan

只看该作者 11楼 发表于: 2013-05-09
mark!
看淡得失
离线chromesync
只看该作者 12楼 发表于: 2013-05-11
不错哦。。。很好
HELL
离线searchcai

只看该作者 13楼 发表于: 2013-05-24
mark
离线pangzhouxing

只看该作者 14楼 发表于: 2013-07-22
mark  备用
离线gwyanping

只看该作者 15楼 发表于: 2013-07-23
打包带走咯
离线voidbroken

只看该作者 16楼 发表于: 2013-07-24
顶楼主...

只看该作者 17楼 发表于: 2013-07-26
好东西 收藏先
离线neil-wen

只看该作者 18楼 发表于: 2013-08-14
再次收藏,多谢楼主
离线sduwgp
只看该作者 19楼 发表于: 2013-10-14
mark
只看该作者 20楼 发表于: 2013-10-22
楼主  你好 我想问一下  你能用Qt画一条幅值在15至20之间的由随机数产生的曲线吗?急用  谢谢
离线zx7415963

只看该作者 21楼 发表于: 2013-11-13
顶一个~~~~~~~~~
离线liuyuanan

只看该作者 22楼 发表于: 2014-02-14
谢谢楼主分享,可以编译通过
离线zztiny

只看该作者 23楼 发表于: 2014-02-19
顶楼主!
离线qxiaoyu718

只看该作者 24楼 发表于: 2014-04-04
新人 学习 收藏 备用
离线chelper

只看该作者 25楼 发表于: 2014-04-24
支持下
离线wll19901105

只看该作者 26楼 发表于: 2014-06-12
有时间研究一下 很不错
离线wayne

只看该作者 27楼 发表于: 2014-12-27
坐标都是hard coded,要是换成可变参数,问题还是挺多的
离线honei_x

只看该作者 28楼 发表于: 2015-03-25
谢谢楼主。
离线姜小白

只看该作者 29楼 发表于: 2016-04-23
  
我整理的一些文章,持续更新中,有兴趣的小伙伴可以关注。
https://xiaozhuanlan.com/sorghum-cpp?rel=sorghum

Qt技术交流:QQ2499971906
离线fsx92

只看该作者 30楼 发表于: 2016-04-24
mark
离线big_mouse

只看该作者 31楼 发表于: 2020-04-15
快速回复
限100 字节
 
上一个 下一个