基于QT繪制一個漂亮的預(yù)警儀表
以下是用Qt實現(xiàn)漂亮預(yù)警儀表的步驟和代碼:
1.創(chuàng)建一個Qt項目,并添加一個主窗口。
2.在主窗口中添加QGraphicsView控件,用于繪制預(yù)警儀表。
3.創(chuàng)建一個QGraphicsScene對象,并將其設(shè)置為QGraphicsView的場景。
QGraphicsScene *scene = new QGraphicsScene(this); ui->graphicsView->setScene(scene);
4.創(chuàng)建一個QGraphicsEllipseItem對象,用于表示預(yù)警儀表的外框。
QGraphicsEllipseItem *outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240)); outerCircle->setPen(QPen(Qt::black, 4)); scene->addItem(outerCircle);
5.創(chuàng)建一個QGraphicsEllipseItem對象,用于表示預(yù)警儀表的中心點。
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);
6.創(chuàng)建一些QGraphicsLineItem對象,用于表示預(yù)警儀表的刻度線。
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);
}
7.創(chuàng)建一個QGraphicsPolygonItem對象,用于表示預(yù)警儀表的指針。
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);
8.在主窗口的定時器中更新指針的旋轉(zhuǎn)角度。
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 <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QGraphicsPolygonItem>
#include <QGraphicsLineItem>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void timerEvent(QTimerEvent *event);
private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
QGraphicsEllipseItem *outerCircle;
QGraphicsEllipseItem *centerCircle;
QGraphicsPolygonItem *pointer;
QList<QGraphicsLineItem*> 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);
// 創(chuàng)建場景
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
// 創(chuàng)建外框
outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240));
outerCircle->setPen(QPen(Qt::black, 4));
scene->addItem(outerCircle);
// 創(chuàng)建中心點
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);
// 創(chuàng)建指針
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);
// 創(chuàng)建刻度線
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畫一個漂亮預(yù)警儀表,具有立體感,代碼,描述設(shè)計步驟

到此這篇關(guān)于基于QT繪制一個漂亮的預(yù)警儀表的文章就介紹到這了,更多相關(guān)QT預(yù)警儀表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++左值與右值,右值引用,移動語義與完美轉(zhuǎn)發(fā)詳解
這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
C++中的vector使用詳解及重要部分底層實現(xiàn)
本篇文章會對vector的語法使用進(jìn)行詳解,同時,還會對重要難點部分的底層實現(xiàn)進(jìn)行講解,其中有vector的迭代器失效和深拷貝問題,希望本篇文章的內(nèi)容會對你有所幫助2023-07-07

