今天是2016年的最后一个工作日,在这个最后工作日里面,和以为网友要了一点练手的素材文件,经过网友确认,不涉及商业机密,在这里分享一下,如侵权,请联系我删除、

先上程序运行图

这里显示数字,闪烁等都没有问题,唯一的问题就是这个速度指针的绘制问题,在代码中我使用的是用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 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

设置开抗锯齿,几乎没有效果,我都怀疑执行了没有

移动Qpainter 的原始坐标点

完了就是简单的绘制 ,

剩下的就是数字仪表的显示

这里我新建了一个专门显示数字的界面

这个几面来负责显示七位数字

数字显示源代码:

头文件

#ifndef NUMBER_H
#define NUMBER_H #include <QWidget> namespace Ui {
class Number;
} class Number : public QWidget
{
Q_OBJECT public:
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; }
}

这里代码开着有点多,其实没有什么含量,说白了就是给七个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()
{
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();
}

在这里来刷新指针和刷新数字界面的显示

大家可能看到图中有的界面是有那个没有系安全带的图标,有的有,这里是实现了一个1Hz的图标闪烁,其实原理很简单,就是QLabel的隐藏,显示,再隐藏,再显示。。。

实现代码:

void Widget::timeout_people()
{
if(ui->label_people->isHidden())
{
ui->label_people->show();
}
else
{
ui->label_people->hide();
}
}

Qt 汽车仪表 QWidget的更多相关文章

  1. QT中QWidget、QDialog以及MainWindow的区别

    参考 http://blog.csdn.net/u011619422/article/details/47311101 QT中QWidget.QDialog以及MainWindow的区别 QWidge ...

  2. QT中QWidget、QDialog QMainWindow

    继承关系:在Qt中所有的类都有一个共同的基类QObject ,QWidget直接继承与QPaintDevice类,QDialog.QMainWindow.QFrame直接继承QWidget 类. QW ...

  3. 【转】QT中QWidget、QDialog及QMainWindow的区别

    QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部件都是矩形的,并且它们按Z轴顺序排列.一个窗口部件 ...

  4. 【Qt】QWidget、QDialog、QMainWindow的异同点【转】

    简述 在分享所有基础知识之前,很有必要在这里介绍下常用的窗口-QWidget.QDialog.QMainWindow. 熟悉Qt的同学都应该知道,在新建Qt Widgets项目进行类信息选择时会碰到它 ...

  5. Qt 'void QWidget::show()' is inaccessible

    今天在编写Qt窗体头文件时,尽然碰到了这样的报错,'void QWidget::show()' is inaccessible,'QWidget' is not an accessible base ...

  6. QT中QWidget、QDialog及QMainWindow的区别

    本文转自http://www.cnblogs.com/aqxin/archive/2011/05/23/2054156.html QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基 ...

  7. QT中QWidget类简介

    一.详细描述 QWidget类是所有用户界面对象的基类.通俗的来讲,Qt基本上所有的UI类都是由QWidget继承出来的,而QWidget继承于QObject,  大家可以查阅Qt source 即可 ...

  8. QT 继承QWidget && 继承QDialog

    工作项目中,利用到Qt对话框,场景需求: 1. 一部分窗体需要继承自QWidget 2. 一部分窗体需要继承自QDialog 3. 两者均需要去掉标题栏图标,同时能够自由拖动. 如果两者分开继承实现, ...

  9. qt——QT中QWidget、QDialog及QMainWindow的区别

    QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部件都是矩形的,并且它们按Z轴顺序排列.一个窗口部件 ...

随机推荐

  1. response.Close、response.End、response.Flush区别

    今天在做文件下载功能用到的是response的方法,首先我们要了解这些方法的作用. 1.response.write():将信息写入http响应输出流. 2.response.Flush:向客户端发送 ...

  2. P3909 异或之积

    P3909 异或之积 为什么叫做异或之积? 答曰:只要不关乎Alice和Bob就行 做完这道水题,感觉自己弱爆了. 一开始就要考虑暴力\(O(n^3)\)的优化. 然后就注意到了题目中的\(6\)为什 ...

  3. ContentProvider 、 ContentResolver 、 ContentObserver

    说说ContentProvider . ContentResolver . ContentObserver 之间的关系**a. ContentProvider 内容提供者,用于对外提供数据 b. Co ...

  4. o'Reill的SVG精髓(第二版)学习笔记——第三章

    第三章:坐标系统 3.1视口 文档打算使用的画布区域称作视口.我们可以在<svg>元素上使用width和height属性确定视口的大小.属性的值可以是一个数字,该数字会被当作用户坐标下的像 ...

  5. LeetCode17.电话号码的字母组合 JavaScript

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...

  6. 数据库——MySQL——数据类型

    详细的看后面给的链接,我只是挑了一部分:http://www.runoob.com/mysql/mysql-data-types.html 在之前说了MySQL的存储引擎.它决定了表的类型,而表内存放 ...

  7. antd不想写那么多option怎么办

    做项目的时候发现如果下拉列表选项多的时候会写很多的 Option ,但是用到下拉列表的地方又超级多.所以自己写了一个方法,哪需要就放到哪. 记录一下方法.留待以后用 selectStreetIdCha ...

  8. 简析--UUID

    内容转载自:http://www.cnblogs.com/java-class/p/4727698.html 阅读目录 1.UUID简介 2.UUID组成 3.UUID实战演练 1.UUID 简介 U ...

  9. Rman 管理 archivelog 的命令

    因为archivelog的相关信息是记录在controlfile中的,当物理删除后不会改变controlfile的设置.并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标 ...

  10. chromium之revocable_store

    // |RevocableStore| is a container of items that can be removed from the store. Revoke: 撤销 Revocable ...