基于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-03C++中的vector使用詳解及重要部分底層實現(xiàn)
本篇文章會對vector的語法使用進(jìn)行詳解,同時,還會對重要難點部分的底層實現(xiàn)進(jìn)行講解,其中有vector的迭代器失效和深拷貝問題,希望本篇文章的內(nèi)容會對你有所幫助2023-07-07