这篇文章主要讲解了“基于QT怎么绘制一个漂亮的预警仪表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于QT怎么绘制一个漂亮的预警仪表”吧!
以下是用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 <QMainWindow>#include <QGraphicsScene>#include <QGraphicsEllipseItem>#include <QGraphicsPolygonItem>#include <QGraphicsLineItem> QT_BEGIN_NAMESPACEnamespace 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); // 创建场景 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画一个漂亮预警仪表,具有立体感,代码,描述设计步骤
感谢各位的阅读,以上就是“基于QT怎么绘制一个漂亮的预警仪表”的内容了,经过本文的学习后,相信大家对基于QT怎么绘制一个漂亮的预警仪表这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!