使用Qt简单谢了一个飞机的一小部分仪表,还没有写完,目前只写了一个界面,不过思想应该是一样的。

效果图如下

其中主要由转速表,和下面的部分数字显示构成

转速表代码

.h文件

#ifndef CONTROL_ENGINE_H
#define CONTROL_ENGINE_H #include <QWidget>
#include <QPainter>
#include <QtMath> #define PI 3.1415926
#define GREEN 0,255,0
#define YELLOW 211,137,50
#define WHITE 255,255,255 namespace Ui {
class Control_Engine;
} class Control_Engine : public QWidget
{
Q_OBJECT public:
explicit Control_Engine(QWidget *parent,int temp);
~Control_Engine();
void set_Engine(int temp);
private:
bool eventFilter(QObject *temp1, QEvent *temp2);
void draw_Engine();
void draw_Percent();
private:
Ui::Control_Engine *ui;
int num_Engine;
int num_Percent;
}; #endif // CONTROL_ENGINE_H

cpp文件

#include "control_engine.h"
#include "ui_control_engine.h"
#include <QDebug>
Control_Engine::Control_Engine(QWidget *parent,int temp) :
QWidget(parent),
ui(new Ui::Control_Engine)
{
ui->setupUi(this);
ui->label_draw->installEventFilter(this);
ui->label_percent->installEventFilter(this);
num_Engine = 0;
num_Percent = 0; if(temp == 0)
{
ui->label_draw->move(50,0);
ui->label->move(40,20);
ui->label_percent->move(0,17);
}
else if(temp == 1)
{
ui->label_draw->move(0,0);
ui->label->move(110,20);
ui->label_percent->move(70,17);
}
} Control_Engine::~Control_Engine()
{
delete ui;
} void Control_Engine::set_Engine(int temp)
{
num_Engine = temp;
num_Percent = temp/2;
update();
} bool Control_Engine::eventFilter(QObject *temp1, QEvent *temp2)
{
if((temp1 == ui->label_draw)&&temp2->type() == QEvent::Paint)
{
draw_Engine();
}
if((temp1 == ui->label_percent)&&temp2->type() == QEvent::Paint)
{
draw_Percent();
}
} void Control_Engine::draw_Engine()
{ if(num_Engine<=200)
{
QPainter painter1(ui->label_draw);
painter1.setRenderHint(QPainter::Antialiasing,true);
painter1.setPen(QPen(QColor(GREEN),3,Qt::SolidLine,Qt::FlatCap));
painter1.drawArc(13,3,54,54,180*16,270*16);
painter1.drawLine(3,30,14,30);
QPainter painter2(ui->label_draw);
painter2.setRenderHint(QPainter::Antialiasing,true);
painter2.setPen(QPen(QColor(GREEN),3,Qt::SolidLine,Qt::FlatCap));
painter2.drawLine(40,30,(40+27*qSin(num_Engine*PI/180.0)),(30-27*qCos(num_Engine*PI/180.0)));
}
else
{
QPainter painter1(ui->label_draw);
painter1.setRenderHint(QPainter::Antialiasing,true);
painter1.setPen(QPen(QColor(YELLOW),3,Qt::SolidLine,Qt::FlatCap));
painter1.drawArc(13,3,54,54,180*16,270*16);
painter1.drawLine(3,30,14,30);
QPainter painter2(ui->label_draw);
painter2.setRenderHint(QPainter::Antialiasing,true);
painter2.setPen(QPen(QColor(YELLOW),3,Qt::SolidLine,Qt::FlatCap));
painter2.drawLine(40,30,(40+27*qSin(num_Engine*PI/180.0)),(30-27*qCos(num_Engine*PI/180.0)));
} } void Control_Engine::draw_Percent()
{
if(num_Percent<=100)
{
QPainter painter1(ui->label_percent);
painter1.setPen(QPen(QColor(WHITE),1.5));
QRect rect1(1,3,36,20);
painter1.drawRect(rect1);
QPainter painter2(ui->label_percent);
painter2.setPen(QPen(QColor(GREEN),1.5));
QString str = QString::number(num_Percent,10);
QFont font("宋体",12,QFont::Bold);
painter2.setFont(font);
painter2.drawText(rect1,Qt::AlignCenter,str);
}
else
{
QPainter painter1(ui->label_percent);
painter1.setPen(QPen(QColor(WHITE),1.5));
QRect rect1(1,3,36,20);
painter1.drawRect(rect1);
QPainter painter2(ui->label_percent);
painter2.setPen(QPen(QColor(YELLOW),1.5));
QString str = QString::number(num_Percent,10);
QFont font("宋体",12,QFont::Bold);
painter2.setFont(font);
painter2.drawText(rect1,Qt::AlignCenter,str);
} }

百分比代码

.h.

#ifndef CONTROL_PERCENT_H
#define CONTROL_PERCENT_H #include <QWidget>
#include <QPainter> #define GREEN 0,255,0
#define WHITE 255,255,255 namespace Ui {
class Control_Percent;
} class Control_Percent : public QWidget
{
Q_OBJECT public:
explicit Control_Percent(QWidget *parent = 0);
~Control_Percent();
void set_Percent(int temp);
private:
void draw_Percent();
bool eventFilter(QObject *temp1, QEvent *temp2);
private:
Ui::Control_Percent *ui;
int num_Percent;
}; #endif // CONTROL_PERCENT_H

cpp

#include "control_percent.h"
#include "ui_control_percent.h" Control_Percent::Control_Percent(QWidget *parent) :
QWidget(parent),
ui(new Ui::Control_Percent)
{
ui->setupUi(this);
num_Percent = 0;
ui->label_percent->installEventFilter(this);
} Control_Percent::~Control_Percent()
{
delete ui;
} void Control_Percent::set_Percent(int temp)
{
num_Percent = temp;
} void Control_Percent::draw_Percent()
{
QPainter painter1(ui->label_percent);
painter1.setPen(QPen(QColor(WHITE),1.5));
QRect rect1(1,3,36,20);
painter1.drawRect(rect1);
QPainter painter2(ui->label_percent);
painter2.setPen(QPen(QColor(GREEN),1.5));
QString str = QString::number(num_Percent,10);
QFont font("宋体",12,QFont::Bold);
painter2.setFont(font);
painter2.drawText(rect1,Qt::AlignCenter,str);
} bool Control_Percent::eventFilter(QObject *temp1, QEvent *temp2)
{
if((temp1 == ui->label_percent)&&temp2->type() == QEvent::Paint)
{
draw_Percent();
}
}

剩下的其它小部分代码

界面初始化部分代码

void MainWidget::set_Form_down(int temp)
{
switch (temp) {
case 0:
{
if(ui->widget_Form_Down->isHidden())
{
ui->widget_Form_Down->show();
}
else
{
ui->label_Form_Down_Plane->setStyleSheet("border-image:url(:/Form_Down/Source/Form_Down/F22.png)");
if(engine_left == NULL)
{
engine_left = new Control_Engine(ui->widget_Form_Down,LEFT);
engine_left->setGeometry(17,20,120,80);
}
if(engine_right == NULL)
{
engine_right = new Control_Engine(ui->widget_Form_Down,RIGHT);
engine_right->setGeometry(180,20,120,80);
} // QPalette palette;
// palette.setColor(QPalette::WindowText,Qt::red);
// ui->label_ENG->setPalette(palette);
// QFont font;
// font.setPointSize(12);
// ui->label_ENG->setFont(font);
// ui->label_ENG->setText("TEST");
// ui->label_ENG->setAlignment(Qt::AlignCenter);
if(percent1 == NULL)
{
percent1 = new Control_Percent(ui->widget_Form_Down);
percent1->setGeometry(30,170,50,26);
percent1->set_Percent(50); //test
}
if(percent2 == NULL)
{
percent2 = new Control_Percent(ui->widget_Form_Down);
percent2->setGeometry(245,170,50,26);
percent2->set_Percent(50); //test
}
if(percent3 == NULL)
{
percent3 = new Control_Percent(ui->widget_Form_Down);
percent3->setGeometry(30,240,50,26);
percent3->set_Percent(50); //test
}
if(percent4 == NULL)
{
percent4 = new Control_Percent(ui->widget_Form_Down);
percent4->setGeometry(245,240,50,26);
percent4->set_Percent(50); //test
}
} break;
}
case 1:
ui->widget_Form_Down->hide();
break;
default:
break;
}
}

绘制其它部分代码

void MainWidget::draw_Gun()
{
QPainter painter1(ui->label_GUN);
painter1.setPen(QPen(QColor(WHITE),1.5));
QRect rect1(1,3,76,22);
painter1.drawRect(rect1);
QPainter painter2(ui->label_GUN);
painter2.setPen(QPen(QColor(GREEN),1.5));
QString str = "GUN "+QString::number(num_GUN,10);
QFont font("宋体",12,QFont::Bold);
painter2.setFont(font);
painter2.drawText(rect1,Qt::AlignCenter,str);
} void MainWidget::draw_Information()
{
QPainter painter1(ui->label_Information);
painter1.setPen(QPen(QColor(WHITE),1.5));
QRect rect1(1,3,118,45);
QRect rect2(1,3,118,24);
QRect rect3(1,24,118,24);
painter1.drawRect(rect1);
QPainter painter2(ui->label_Information);
painter2.setPen(QPen(QColor(WHITE),1.5));
QString str = "BAY DOORS";
QFont font("宋体",12,QFont::Bold);
painter2.setFont(font);
painter2.drawText(rect2,Qt::AlignCenter,str); QPainter painter3(ui->label_Information);
if(BAY_DOORS == "CLOSED")
{
painter3.setPen(QPen(QColor(GREEN),1.5));
}
else
{
painter3.setPen(QPen(QColor(RED),1.5));
}
QFont font1("宋体",12,QFont::Bold);
painter3.setFont(font1);
painter3.drawText(rect3,Qt::AlignCenter,BAY_DOORS);
} void MainWidget::draw_Bay()
{
QPainter painter(ui->label_BAY);
QRect rect1(0,0,30,16); if(BAY_DOORS == "CLOSED")
{
painter.setPen(QPen(QColor(GREEN),1.5));
}
else
{
painter.setPen(QPen(QColor(RED),1.5));
}
QString str = "BAY";
QFont font("宋体",12,QFont::Bold);
painter.setFont(font);
painter.drawText(rect1,Qt::AlignCenter,str);
}

Qt 飞机仪表显示的更多相关文章

  1. Qt自适应大小显示图片,添加菜单

    由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...

  2. Qt全屏显示窗口、子窗口的相关函数

    Qt全屏显示函数         window.showFullScreen() Qt最大化显示函数         window.showMaximized() Qt最小化显示函数         ...

  3. Qt支持中文显示

    Qt支持中文显示<1>.在代码中添加以下代码 QTextCodec* codec = QTextCodec::codecForLocale(); if (codec != NULL) { ...

  4. QT+OpenGL读取显示图片,OpenGL在QT里的刷新问题(好几篇)

    GLuint readImage(char *filename){    GLuint tex_id;    GLint alignment; QImage tex, buf;    buf.load ...

  5. Qt 让Label显示图片并把图片居中

    Qt 让Label显示图片并把图片居中   QPixmap image("./13.jpg"); QPixmap fitpixmap=image.scaled(ui->lab ...

  6. Qt 汽车仪表再次编写,Widget,仪表显示,绘制界面

    感谢某网友提供UI让我练练手,上目前的效果 还在晚上,代码等后面在贴出来,就是出来显摆一下

  7. QT的QWebView显示网页不全

    最近使用QWebView控件遇到一个问题,就是无论窗口多大,网页都显示那么大,而且,显示不完全,有滚动条 试过使用showMaximized()方法, 还是一样,网上一直说是布局问题,也没说清楚是虾米 ...

  8. Qt通过QToolTip显示浮动信息

    QToolTip类的应用十分简单,其QToolTip类中全都是静态方法,如果要显示浮动信息的话使用该函数即可: void QToolTip::showText ( const QPoint & ...

  9. 【转】发布的QT程序无法显示图标和图片的问题

    在windows下编译好的QT程序在其他没有安装QT的机器上会出现图标和图片无法正常显示的问题. 这时我们可以通过以下方式来解决: 在release文件夹里创建plugins文件夹,并将QT安装目录下 ...

随机推荐

  1. Mysql索引学习笔记

    1.btree索引与hash索引 下列范围查询适用于 btree索引和hash索引: SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,2 ...

  2. 【题解】洛谷P1445 [Violet]樱花 (推导+约数和)

    洛谷P1445:https://www.luogu.org/problemnew/show/P1445 推导过程 1/x+1/y=1/n! 设y=n!+k(k∈N∗) 1/x​+1/(n!+k)​=1 ...

  3. HDU 1099 Lottery (求数学期望)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1099 Lottery Time Limit: 2000/1000 MS (Java/Others)   ...

  4. sql server 中数据库数据导入到另一个库中

    这篇说了sql语句对于备份的数据库进行还原 ,如果数据量大了还是什么问题,发现我的数据丢失了一些,头疼 sql server 备份还原 下面使用的的数据导入来解决这个问题,因为数据量比较大,导出来的脚 ...

  5. AngularJS显示一个简单表格

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. Javafxml

    FXML入门教程 本部分教程包括两部分内容: 为什么使用FXML(基本介绍以及用FXML创建用户界面的好处): 使用FXML创建用户界面(通过创建简单登录应用来完成本教程部分). 1.1 为何使用FX ...

  7. rest_framework--RESTful规范

    #####RESTful规范##### 一.什么是restful restful其实就是一种软件架构风格,跟技术毫无关系.是一种面向资源编程的方法. 说起面向资源编程,我想起了之前了解到的面向过程编程 ...

  8. Mongodb在window上启动

    MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.这里主要讲如何在windows平台下安装MongoDB. 安装最新版本mon ...

  9. <寒假逆向学习第一天> 破解基础知识之介绍常见工具和壳的特征

    对于我们新手来说,程序是什么语言编写的?程序到底有没有加壳?程序加了什么壳?一直在我们心中充满了疑惑,本文我将根据我的近期学习,总结一下常见的工具和壳的特征. 一:程序是什么语言编译的 从目前接触到程 ...

  10. Delphi 版FindWindow 和 FindWindowEx 的语法和用法

    FindWindow(lpClassName,        {窗口的类名}lpWindowName: PChar {窗口的标题}): HWND;              {返回窗口的句柄; 失败返 ...