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);