Qt 汽車儀表 QWidget

2022-04-02 09:48:37 字數 3709 閱讀 7158

先上程式執行圖

這裡顯示數字,閃爍等都沒有問題,唯一的問題就是這個速度指標的繪製問題,在**中我使用的是用qpainter繪製image。鋸齒好嚴重,這裡我已經開了抗鋸齒

painter.setrenderhint(qpainter::antialiasing,true);
但是效果幾乎沒有,是操作不對,還是需要特殊設定了

剩下的就是分享**了

首先就是這個指標的繪製**

ui->label->setstylesheet("border-image:url(:/source/beijing.bmp)");

ui->label->installeventfilter(this);

image_pointer.load(":/source/222.png");

這裡主要就是設定大背景,就是後面的那麼最大的儀表介面,剩下的就是為這個要在qlabel上面繪製指標,需要為qlabel註冊繪製事件,否則程式會濾掉這個繪製事件

繪製指標**

void widget::painter_car()

這裡新建qpainter繼承值qlabel

設定開抗鋸齒,幾乎沒有效果,我都懷疑執行了沒有

移動qpainter 的原始座標點

完了就是簡單的繪製 , 

剩下的就是數字儀表的顯示

這裡我新建了乙個專門顯示數字的介面

這個幾面來負責顯示七位數字

數字顯示源**:

標頭檔案

#ifndef number_h

#define number_h

#include namespace ui

class number : public qwidget

;#endif // number_h

原始檔

#include "number.h"

#include "ui_number.h"

#include number::number(qwidget *parent) :

qwidget(parent),

ui(new ui::number)

number::~number()

void number::set_number(int number)

set_image(1,number%10);

if(number/10>0)

if(number/100>0)

if(number/1000>0)

if(number/10000>0)

if(number/100000>0)

if(number/1000000>0)

}void number::set_image(int flag, int number)

break;

case 2:

switch (number)

break;

case 3:

switch (number)

break;

case 4:

switch (number)

break;

case 5:

switch (number)

break;

case 6:

switch (number)

break;

case 7:

switch (number)

break;}}

這裡**開著有點多,其實沒有什麼含量,說白了就是給七個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個介面例項,

bool flag_pointer = true;

void widget::timerout_poinyer()}}

else}}

++temp;

if(temp>999999)

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();

}

在這裡來重新整理指標和重新整理數字介面的顯示

大家可能看到圖中有的介面是有那個沒有系安全帶的圖示,有的有,這裡是實現了乙個1hz的圖示閃爍,其實原理很簡單,就是qlabel的隱藏,顯示,再隱藏,再顯示。。。

實現**:

Qt 繪製儀錶盤

1.首先準備素材,乙個表盤,乙個指標 2.計算旋轉圓心及轉動角度 通過畫圖軟體測量一下表盤中心的座標,及指標中心的座標 大概表盤的中心為 163,163 同樣指標的中心位置為 14,110 轉動角度可以大概測量一下,應該為 120,120 度 3.轉動操作 有了這些資料就可以來繪製表盤了 設定表盤的...

QT 儀錶盤製作

這裡提供的介面設計思想基於graphics框架,採用svg進行設計 這裡參考了一款飛行的開源軟體 使用inkscape參考開源軟體的儀表設計介面進行儀表零部件劃設 背景 表盤 蒙版 基礎使用方法參考 使用qt中的類qgraphicssvgitem載入設計出來的儀表零部件,設定其位置 大小 qt 工程...

Qt 設定QWidget背景色

qt設定qwidget背景顏色的方法測試了三種,推薦第一種。一 使用qpalette qpalette palette palette.setcolor qpalette background,qt yellow this setautofillbackground true this setpal...