Qt绘制反向扇形(顺时针扇形,附顺时针环状进度条绘制源码)

62 篇文章 104 订阅

Qt的扇形都是逆时针方向画的,如果我们想画汽车仪表那种顺时针方向的扇形呢?
Qt绘制基本扇形的核心代码:

QRectF rectangle(10.0, 20.0, 80.0, 60.0);//设定扇形所在的矩形,扇形画在矩形内部
int startAngle = 30 * 16;//起始角度,角度可以为负值,如-30*16
int spanAngle = 120 * 16;//覆盖的角度,绘制方向为逆时针方向
QPainter painter(this);
painter.drawPie(rectangle, startAngle, spanAngle);

举个例子,当我们绘制饼图时,首先,绘制一个整圆,然后我们需要在圆内用另一种颜色绘制百分之六十,扇形的角度就是360*0.6;反向绘制时,就绘制百分之四十,即360*0.4,圆的剩余的部分就是我们需要的百分之六十;这是基本思路
这里写图片描述
上图是我画顺时针环状进度条的效果图,核心代码如下:

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);//设置圆滑绘制风格(抗锯齿)
//绘制圆环 
        float m_persent = 80;//此处我画80%
        int m_rotateAngle = 270*(1-m_persent/100);
        int side = qMin(width(), height()); 
        //定义矩形绘制区域
        QRectF outRect(200,80, 200, 200);
        QRectF inRect(220, 100, 200-40, 200-40); 
        //转换需要绘出的值
        QString valueStr = QString("%1%").arg(QString::number(m_persent));

        //画外圆
        painter.setPen(Qt::NoPen);
        painter.setBrush(QBrush(QColor(255, 107, 107)));//红色
        painter.drawPie(outRect,-30*16,240*16);
        //画内圆
        painter.setBrush(QBrush(QColor(97, 117, 118)));//黑色
        painter.drawPie(outRect, -30*16, m_rotateAngle*16);
        //画遮罩,遮罩颜色为窗口颜色
        painter.setBrush(palette().window().color());
        painter.drawEllipse(inRect); 
         //画文字
        QFont f = QFont("Microsoft YaHei", 15, QFont::Bold);
        painter.setFont(f);
        painter.setFont(f);
        painter.setPen(QColor("#555555"));
        painter.drawText(inRect, Qt::AlignCenter, valueStr);
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值