使用qpainter绘制一个汽车仪表盘
时间: 2024-06-09 07:11:55 浏览: 94
好的,以下是使用Qt的QPainter绘制汽车仪表盘的示例代码:
```cpp
void Widget::paintEvent(QPaintEvent *)
{
// 创建画笔
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 画背景
painter.setBrush(QBrush(QColor("#f0f0f0")));
painter.drawRect(0, 0, width(), height());
// 画表盘
painter.translate(width() / 2, height() / 2); // 移动画笔到中心点
painter.setPen(QPen(Qt::black, 2));
painter.setBrush(QBrush(Qt::white));
painter.drawEllipse(QRect(-100, -100, 200, 200));
// 画刻度
int startAngle = 60;
int angleStep = 6;
int steps = 240;
double angle = 0;
double pi = 3.14159265358979323846;
double angleRad = 0;
double x1, y1, x2, y2;
for (int i = 0; i <= steps; i++)
{
angle = (startAngle - i * angleStep) * pi / 180;
angleRad = pi / 2 - angle;
x1 = cos(angleRad) * 80;
y1 = sin(angleRad) * 80;
if (i % 10 == 0) {
x2 = cos(angleRad) * 70;
y2 = sin(angleRad) * 70;
} else {
x2 = cos(angleRad) * 75;
y2 = sin(angleRad) * 75;
}
painter.drawLine(QPointF(x1, y1), QPointF(x2, y2));
}
// 画指针
painter.save(); // 保存当前状态
painter.rotate(-120); // 旋转画笔
QPolygonF polygon;
polygon << QPointF(0, -50) << QPointF(10, 0) << QPointF(-10, 0) << QPointF(0, -50); // 指针的形状
painter.setBrush(QBrush(Qt::red));
painter.drawPolygon(polygon);
painter.restore(); // 恢复之前的状态
// 画文字
painter.setPen(QPen(Qt::black, 1));
QFont font;
font.setPointSize(10);
painter.setFont(font);
painter.drawText(QRect(-50, -50, 100, 100), Qt::AlignHCenter | Qt::AlignTop, "km/h");
painter.drawText(QRect(-50, 0, 100, 100), Qt::AlignHCenter | Qt::AlignTop, "0");
painter.drawText(QRect(-50, -100, 100, 100), Qt::AlignHCenter | Qt::AlignTop, "240");
}
```
注意:本示例代码中的角度计算方式是以顺时针方向为正方向,因此在绘制指针时需要将角度反转。
阅读全文
相关推荐















