以下是一个简单的汽车仪表盘的QT代码示例:
main.cpp文件:
#include <QApplication>
#include "dashboard.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dashboard w;
w.show();
return a.exec();
}
dashboard.h文件:
#ifndef DASHBOARD_H
#define DASHBOARD_H
#include <QWidget>
#include <QTimer>
class Dashboard : public QWidget
{
Q_OBJECT
public:
Dashboard(QWidget *parent = nullptr);
~Dashboard();
private:
QTimer *m_timer;
int m_speed;
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // DASHBOARD_H
dashboard.cpp文件:
#include "dashboard.h"
#include <QPainter>
Dashboard::Dashboard(QWidget *parent)
: QWidget(parent), m_speed(0)
{
setFixedSize(300, 300);
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, [this](){
m_speed += 10;
if (m_speed > 240) {
m_speed = 0;
}
update();
});
m_timer->start(1000);
}
Dashboard::~Dashboard()
{
}
void Dashboard::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
static const QPoint points[] = {
QPoint(150, 70),
QPoint(170, 70),
QPoint(170, 90),
QPoint(150, 90)
};
static const int speedLabelRadius = 60;
static const int speedNeedleRadius = 50;
static const int speedArcRadius = 80;
static const int scaleLength = 10;
static const int gaugeWidth = 4;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 画表盘
painter.save();
painter.translate(width() / 2, height() / 2);
QPen pen;
pen.setWidth(gaugeWidth);
painter.setPen(pen);
// 画速度表刻度
for (int i = 0; i <= 240; i += 20) {
if (i % 60 == 0) {
painter.drawLine(speedArcRadius - scaleLength, 0, speedArcRadius, 0);
} else {
painter.drawLine(speedArcRadius - scaleLength / 2, 0, speedArcRadius, 0);
}
painter.rotate(1.5);
}
// 画速度表指针
painter.rotate(-120 + m_speed * 1.5);
painter.drawLine(0, 0, speedNeedleRadius, 0);
// 画速度表数字
pen.setWidth(2);
painter.setPen(pen);
QFont font;
font.setPointSize(14);
painter.setFont(font);
QRectF speedLabelRect(-speedLabelRadius, -speedLabelRadius, speedLabelRadius * 2, speedLabelRadius * 2);
painter.drawText(speedLabelRect, Qt::AlignCenter, QString::number(m_speed));
painter.restore();
}
上述代码实现了一个简单的汽车仪表盘,包括了速度表盘、刻度、指针和数字。可以在QT中运行,并且每秒钟更新一次速度值,使指针动态移动。但这只是一个简单的示例,实际情况下可能需要更复杂的汽车仪表盘,需要根据实际需求进行开发。