Qt 汽车仪表 QWidget
今天是2016年的最后一個(gè)工作日,在這個(gè)最后工作日里面,和以為網(wǎng)友要了一點(diǎn)練手的素材文件,經(jīng)過(guò)網(wǎng)友確認(rèn),不涉及商業(yè)機(jī)密,在這里分享一下,如侵權(quán),請(qǐng)聯(lián)系我刪除、
?
先上程序運(yùn)行圖
?
?
?
這里顯示數(shù)字,閃爍等都沒(méi)有問(wèn)題,唯一的問(wèn)題就是這個(gè)速度指針的繪制問(wèn)題,在代碼中我使用的是用QPainter繪制image。鋸齒好嚴(yán)重,這里我已經(jīng)開了抗鋸齒
?
painter.setRenderHint(QPainter::Antialiasing,true);但是效果幾乎沒(méi)有,是操作不對(duì),還是需要特殊設(shè)置了
?
?
剩下的就是分享代碼了
?
首先就是這個(gè)指針的繪制代碼
?
ui->label->setStyleSheet("border-image:url(:/source/beijing.bmp)");ui->label->installEventFilter(this);image_pointer.load(":/source/222.png");?
?
?
?
?
這里主要就是設(shè)置大背景,就是后面的那么最大的儀表界面,剩下的就是為這個(gè)要在Qlabel上面繪制指針,需要為QLabel注冊(cè)繪制事件,否則程序會(huì)濾掉這個(gè)繪制事件
?
繪制指針代碼
?
void Widget::painter_car() {QPainter painter(ui->label);painter.setRenderHint(QPainter::Antialiasing,true);painter.translate(960,360);painter.save();painter.rotate(pointer_number);QRectF target(-40,-267.0,80.0,336.0);QRectF source(0.0,0.0,80.0,336.0);painter.drawImage(target,image_pointer,source);painter.restore();}這里新建Qpainter繼承值Qlabel
?
設(shè)置開抗鋸齒,幾乎沒(méi)有效果,我都懷疑執(zhí)行了沒(méi)有
?
移動(dòng)Qpainter 的原始坐標(biāo)點(diǎn)
?
完了就是簡(jiǎn)單的繪制 ,?
?
剩下的就是數(shù)字儀表的顯示
?
這里我新建了一個(gè)專門顯示數(shù)字的界面
這個(gè)幾面來(lái)負(fù)責(zé)顯示七位數(shù)字
?
數(shù)字顯示源代碼:
?
頭文件
?
?
#ifndef NUMBER_H #define NUMBER_H#include <QWidget>namespace Ui { class Number; }class Number : public QWidget {Q_OBJECTpublic:explicit Number(QWidget *parent = 0);~Number();void set_Number(int number);private:void set_image(int flag,int number); private:Ui::Number *ui; };#endif // NUMBER_H?
?
源文件
?
#include "number.h" #include "ui_number.h" #include <QDebug> Number::Number(QWidget *parent) :QWidget(parent),ui(new Ui::Number) {ui->setupUi(this); }Number::~Number() {delete ui; }void Number::set_Number(int number) {if(number==0){set_image(1,0);}set_image(1,number%10);if(number/10>0){set_image(2,number/10);}if(number/100>0){set_image(3,number/100);}if(number/1000>0){set_image(4,number/1000);}if(number/10000>0){set_image(5,number/10000);}if(number/100000>0){set_image(6,number/100000);}if(number/1000000>0){set_image(7,number/1000000);}}void Number::set_image(int flag, int number) {switch (flag) {case 1:switch (number) {case 0:ui->label->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label->setStyleSheet("border-image:url(:/source/9.png)");break;}break;case 2:switch (number) {case 0:ui->label_2->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label_2->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label_2->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label_2->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label_2->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label_2->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label_2->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label_2->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label_2->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label_2->setStyleSheet("border-image:url(:/source/9.png)");break;}break;case 3:switch (number) {case 0:ui->label_3->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label_3->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label_3->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label_3->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label_3->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label_3->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label_3->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label_3->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label_3->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label_3->setStyleSheet("border-image:url(:/source/9.png)");break;}break;case 4:switch (number) {case 0:ui->label_4->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label_4->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label_4->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label_4->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label_4->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label_4->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label_4->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label_4->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label_4->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label_4->setStyleSheet("border-image:url(:/source/9.png)");break;}break;case 5:switch (number) {case 0:ui->label_5->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label_5->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label_5->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label_5->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label_5->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label_5->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label_5->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label_5->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label_5->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label_5->setStyleSheet("border-image:url(:/source/9.png)");break;}break;case 6:switch (number) {case 0:ui->label_6->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label_6->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label_6->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label_6->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label_6->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label_6->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label_6->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label_6->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label_6->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label_6->setStyleSheet("border-image:url(:/source/9.png)");break;}break;case 7:switch (number) {case 0:ui->label_7->setStyleSheet("border-image:url(:/source/0.png)");break;case 1:ui->label_7->setStyleSheet("border-image:url(:/source/1.png)");break;case 2:ui->label_7->setStyleSheet("border-image:url(:/source/2.png)");break;case 3:ui->label_7->setStyleSheet("border-image:url(:/source/3.png)");break;case 4:ui->label_7->setStyleSheet("border-image:url(:/source/4.png)");break;case 5:ui->label_7->setStyleSheet("border-image:url(:/source/5.png)");break;case 6:ui->label_7->setStyleSheet("border-image:url(:/source/6.png)");break;case 7:ui->label_7->setStyleSheet("border-image:url(:/source/7.png)");break;case 8:ui->label_7->setStyleSheet("border-image:url(:/source/8.png)");break;case 9:ui->label_7->setStyleSheet("border-image:url(:/source/9.png)");break;}break;} }?
?
?
?
?
?
?
這里代碼開著有點(diǎn)多,其實(shí)沒(méi)有什么含量,說(shuō)白了就是給七個(gè)QLabel換背景
?
使用情況
?
?
number_1 = new Number(ui->widget_1);number_1->resize(175,32);number_1->move(0,0);number_1->set_Number(temp);number_1->show();number_2 = new Number(ui->widget_2);number_2->resize(175,32);number_2->move(0,0);number_2->set_Number(temp);number_2->show();number_3 = new Number(ui->widget_3);number_3->resize(175,32);number_3->move(0,0);number_3->set_Number(temp);number_3->show();number_4 = new Number(ui->widget_4);number_4->resize(175,32);number_4->move(0,0);number_4->set_Number(temp);number_4->show();number_5 = new Number(ui->widget_5);number_5->resize(175,32);number_5->move(0,0);number_5->set_Number(temp);number_5->show();number_6 = new Number(ui->widget_6);number_6->resize(175,32);number_6->move(0,0);number_6->set_Number(temp);number_6->show();
新建6個(gè)界面實(shí)例,
?
?
?
bool flag_pointer = true; void Widget::timerout_poinyer() {if(flag_pointer){if(pointer_number<135){++pointer_number;if(pointer_number == 135){flag_pointer = false;}}}else{if(pointer_number>-135){--pointer_number;if(pointer_number == -135){flag_pointer = true;}}}++temp;if(temp>999999){temp = 0;}number_1->set_Number(temp);number_2->set_Number(temp);number_3->set_Number(temp);number_4->set_Number(temp);number_5->set_Number(temp);number_6->set_Number(temp);this->update(); }?
在這里來(lái)刷新指針和刷新數(shù)字界面的顯示
?
?
?
?
大家可能看到圖中有的界面是有那個(gè)沒(méi)有系安全帶的圖標(biāo),有的有,這里是實(shí)現(xiàn)了一個(gè)1Hz的圖標(biāo)閃爍,其實(shí)原理很簡(jiǎn)單,就是QLabel的隱藏,顯示,再隱藏,再顯示。。。
?
實(shí)現(xiàn)代碼:
?
void Widget::timeout_people() {if(ui->label_people->isHidden()){ui->label_people->show();}else{ui->label_people->hide();} }?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Qt 汽车仪表 QWidget的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《计算机组网试验-OSPF基本配置 》杭
- 下一篇: HDU-3001(旅行商问题+三进制状压