查看完整版本: [-- Qt绘制三维图形饼图 --]

QTCN开发网 -> Qt代码秀 -> Qt绘制三维图形饼图 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

robertkun 2013-03-13 00:05

Qt绘制三维图形饼图

  1. void aaq::paintEvent( QPaintEvent* ev )
    {
        QPainter painter(this);
        // 去除画笔
        painter.setPen(Qt::NoPen);
        // 设置反锯齿
        painter.setRenderHint(QPainter::Antialiasing);

        //******************************************** 圆饼图 *****************************************//
        if(1)
        {
            // 顶层圆面
            QRectF rect_top(10.0, 20.0, 280.0, 160.0);
            // 底层圆面
            QRectF rect_bottom(10.0, 60.0, 280.0, 160.0);
            // 中间矩形
            QRectF rect_midd(10.0, 100.0, 280.0, 40.0);

            // 扇形起始角度
            int startAngle = 230 * 16;
            // 扇形覆盖范围
            int spanAngle = 60 * 16;

            painter.setBrush(QColor(97,35,35,255));
            // 绘制底层圆面
            painter.drawEllipse(rect_bottom);
            // 绘制中间矩形
            painter.drawRect(rect_midd);

            painter.setBrush(QColor(Qt::darkYellow));
            // 绘制底层扇形
            painter.drawPie(rect_bottom, startAngle, spanAngle);

            // 扇形的弦与弧的交点
            double pi = 3.1415926;
            double dx1 = rect_top.width() * 0.5 * cos(230 * pi / 180);
            double dy1 = rect_top.height() * 0.5 * sin(230 * pi / 180);

            double dx2 = rect_top.width() * 0.5 * cos(290 * pi / 180);
            double dy2 = rect_top.height() * 0.5 * sin(290 * pi / 180);


            // 求交点的坐标值
            QPointF posBackCenter = QPointF(rect_top.center());
            double dX1 = posBackCenter.x() + dx1 + 0.5;
            double dY1 = posBackCenter.y() - dy1 + 0.5;

            double dX2 = posBackCenter.x() + dx2 + 0.5;
            double dY2 = posBackCenter.y() - dy2 + 0.5;

            // 记录交点
            QPointF topLeft = QPointF(dX1, dY1);
            QPointF bottomRight = QPointF(dX2, dY2) + QPointF(0,40);
            QPointF bottomLeft = topLeft + QPointF(0,40);
            painter.setBrush(QColor(Qt::darkYellow));

            // 绘制连接扇形的区域
            QPolygonF path;
            path << topLeft << QPointF(dX2,dY2) << bottomRight << bottomLeft;
            painter.drawPolygon(path);

            // 绘制顶层圆面
            painter.setBrush(QColor(156,56,56,255));
            painter.drawEllipse(rect_top);

            // 绘制顶层扇形
            painter.setBrush(QColor(Qt::yellow));
            painter.drawPie(rect_top, startAngle, spanAngle);
        }

        QWidget::paintEvent(ev);
    }

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


ppdayz 2013-03-13 09:17
感谢楼主分享,mark 备用

XChinux 2013-03-13 09:34
顶楼主

yzcx 2013-03-14 15:33
我下了了,按说明编了,为什么我收不到任何数据

robertkun 2013-03-14 16:40
引用第3楼yzcx于2013-03-14 15:33发表的  :
我下了了,按说明编了,为什么我收不到任何数据



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




codercoder 2013-04-04 00:07
mark一下,备不时之用

weiweiqiao 2013-04-11 23:54
thank you for sharing

toby520 2013-04-18 10:20
收藏,有空研究下

share_idea 2013-04-23 20:11
不错

o7ouro 2013-04-24 00:00
mark一下

neil-wen 2013-04-26 19:51
^_^   收藏了  ~~    

tompsontan 2013-05-09 18:21
mark!

chromesync 2013-05-11 22:28
不错哦。。。很好

searchcai 2013-05-24 15:21
mark

pangzhouxing 2013-07-22 16:00
mark  备用

gwyanping 2013-07-23 13:57
打包带走咯

voidbroken 2013-07-24 12:34
顶楼主...

风吹秋叶舞 2013-07-26 15:04
好东西 收藏先

neil-wen 2013-08-14 10:02
再次收藏,多谢楼主

sduwgp 2013-10-14 16:45
mark

zxl一叶知秋 2013-10-22 19:24
楼主  你好 我想问一下  你能用Qt画一条幅值在15至20之间的由随机数产生的曲线吗?急用  谢谢

zx7415963 2013-11-13 09:52
顶一个~~~~~~~~~

liuyuanan 2014-02-14 14:16
谢谢楼主分享,可以编译通过

zztiny 2014-02-19 17:00
顶楼主!

qxiaoyu718 2014-04-04 17:24
新人 学习 收藏 备用

chelper 2014-04-24 10:25
支持下

wll19901105 2014-06-12 16:57
有时间研究一下 很不错

wayne 2014-12-27 18:31
坐标都是hard coded,要是换成可变参数,问题还是挺多的

honei_x 2015-03-25 23:01
谢谢楼主。

姜小白 2016-04-23 10:12
  

fsx92 2016-04-24 15:56
mark

big_mouse 2020-04-15 09:44


查看完整版本: [-- Qt绘制三维图形饼图 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled