以下是用Qt实现漂亮预警仪表的步骤和代码:
创建一个Qt项目,并添加一个主窗口。
在主窗口中添加QGraphicsView控件,用于绘制预警仪表。
创建一个QGraphicsScene对象,并将其设置为QGraphicsView的场景。
QGraphicsScene *scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
创建一个QGraphicsEllipseItem对象,用于表示预警仪表的外框。
QGraphicsEllipseItem *outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240));
outerCircle->setPen(QPen(Qt::black, 4));
scene->addItem(outerCircle);
创建一个QGraphicsEllipseItem对象,用于表示预警仪表的中心点。
QGraphicsEllipseItem *centerCircle = new QGraphicsEllipseItem(QRectF(-15,-15,30,30));
centerCircle->setBrush(QBrush(Qt::red));
centerCircle->setPen(QPen(Qt::black, 2));
centerCircle->setZValue(1);
scene->addItem(centerCircle);
创建一些QGraphicsLineItem对象,用于表示预警仪表的刻度线。
for (int i = 0; i < 12; i++) {QGraphicsLineItem *line = new QGraphicsLineItem(-100, 0, -80, 0);line->setPen(QPen(Qt::black, 3));line->setRotation(i * 30);line->setPos(0, 0);scene->addItem(line);
}
创建一个QGraphicsPolygonItem对象,用于表示预警仪表的指针。
QPolygonF polygon;
polygon << QPointF(-10, 0) << QPointF(0, -120) << QPointF(10, 0);
QGraphicsPolygonItem *pointer = new QGraphicsPolygonItem(polygon);
pointer->setBrush(QBrush(Qt::red));
pointer->setPen(QPen(Qt::black, 2));
pointer->setZValue(2);
pointer->setPos(0, 0);
scene->addItem(pointer);
在主窗口的定时器中更新指针的旋转角度。
void MainWindow::timerEvent(QTimerEvent *event)
{Q_UNUSED(event);int angle = ui->spinBox->value();QGraphicsItem *item = ui->graphicsView->scene()->items().at(3);item->setRotation(angle);
}
完整的代码如下:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include
#include
#include
#include
#include QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void timerEvent(QTimerEvent *event);private:Ui::MainWindow *ui;QGraphicsScene *scene;QGraphicsEllipseItem *outerCircle;QGraphicsEllipseItem *centerCircle;QGraphicsPolygonItem *pointer;QList lines;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建场景scene = new QGraphicsScene(this);ui->graphicsView->setScene(scene);// 创建外框outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240));outerCircle->setPen(QPen(Qt::black, 4));scene->addItem(outerCircle);// 创建中心点centerCircle = new QGraphicsEllipseItem(QRectF(-15,-15,30,30));centerCircle->setBrush(QBrush(Qt::red));centerCircle->setPen(QPen(Qt::black, 2));centerCircle->setZValue(1);scene->addItem(centerCircle);// 创建指针QPolygonF polygon;polygon << QPointF(-10, 0) << QPointF(0, -120) << QPointF(10, 0);pointer = new QGraphicsPolygonItem(polygon);pointer->setBrush(QBrush(Qt::red));pointer->setPen(QPen(Qt::black, 2));pointer->setZValue(2);pointer->setPos(0, 0);pointer->setRotation(0);scene->addItem(pointer);// 创建刻度线for (int i = 0; i < 12; i++) {QGraphicsLineItem *line = new QGraphicsLineItem(-100, 0, -80, 0);line->setPen(QPen(Qt::black, 3));line->setRotation(i * 30);line->setPos(0, 0);lines.append(line);scene->addItem(line);}// 启动定时器startTimer(100);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::timerEvent(QTimerEvent *event)
{Q_UNUSED(event);int angle = ui->spinBox->value();QGraphicsItem *item = ui->graphicsView->scene()->items().at(3);pointer->setRotation(angle);
}
用Qt画一个漂亮预警仪表,具有立体感,代码,描述设计步骤
代码下载