Qwt 使用QwtDial绘制汽车仪表盘

1.概述

QwtDial是Qwt库中的一个类,用于绘制一个可旋转的仪表盘。

以下是类继承关系:

2.常用方法

void setOrigin(double origin) 设置仪表盘的原点角度,以度为单位,默认为0度,正值为逆时针旋转,负值为顺时针旋转。

void setScaleArc (double minArc, double maxArc) 设置最小、最大角度

void setMinScaleArc (double) 设置刻度盘的最小角度

void setMaxScaleArc (double) 设置刻度盘的最大角度

void setValue(double value) 设置当前指示器的值。

void setNeedle(QwtDialSimpleNeedle *needle) 设置指针的样式,可以通过创建一个QwtDialNeedle指针对象并设置其样式来自定义指针。

void setScaleDraw (QwtRoundScaleDraw *) 设置绘制的坐标轴

void setScale (double lowerBound, double upperBound) 设置范围

void setScaleStepSize (double stepSize) 设置步长

3.示例


 

自定义SpeedoMeter类继承QwtDial。

#ifndef SPEEDOMETER_H
#define SPEEDOMETER_H#include <QPainter>
#include "qwt_dial.h"
#include "qwt_round_scale_draw.h"
#include "qwt_dial_needle.h"class SpeedoMeter : public QwtDial
{
public:SpeedoMeter( QWidget* parent = NULL );void setLabel( const QString& );QString label() const;protected:virtual void drawScaleContents( QPainter* painter,const QPointF& center, double radius ) const QWT_OVERRIDE;private:QString m_label;
};#endif // SPEEDOMETER_H#include "SpeedoMeter.h"
#include <QPainter>SpeedoMeter::SpeedoMeter( QWidget* parent ): QwtDial( parent ), m_label( "km/h" )
{QwtRoundScaleDraw* scaleDraw = new QwtRoundScaleDraw();scaleDraw->setSpacing( 8 );scaleDraw->enableComponent( QwtAbstractScaleDraw::Backbone, false );scaleDraw->setTickLength( QwtScaleDiv::MinorTick, 0 );scaleDraw->setTickLength( QwtScaleDiv::MediumTick, 4 );scaleDraw->setTickLength( QwtScaleDiv::MajorTick, 8 );setScaleDraw( scaleDraw );setWrapping( false );setReadOnly( true );setOrigin( 135.0 );setScaleArc( 0.0, 270.0 );QwtDialSimpleNeedle* needle = new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, true, Qt::red,QColor( Qt::gray ).lighter( 130 ) );setNeedle( needle );setScaleStepSize( 20.0 );setScale( 0.0, 240.0 );this->scaleDraw()->setPenWidthF( 2 );
}void SpeedoMeter::setLabel( const QString& label )
{m_label = label;update();
}QString SpeedoMeter::label() const
{return m_label;
}void SpeedoMeter::drawScaleContents( QPainter* painter,const QPointF& center, double radius ) const
{QRectF rect( 0.0, 0.0, 2.0 * radius, 2.0 * radius - 10.0 );rect.moveCenter( center );const QColor color = palette().color( QPalette::Text );painter->setPen( color );const int flags = Qt::AlignBottom | Qt::AlignHCenter;painter->drawText( rect, flags, m_label );
}

使用:

#ifndef SPEEDOMETERWIDGET_H
#define SPEEDOMETERWIDGET_H#include <QWidget>
#include <QTimerEvent>namespace Ui {
class SpeedoMeterWidget;
}class SpeedoMeterWidget : public QWidget
{Q_OBJECTpublic:explicit SpeedoMeterWidget(QWidget *parent = 0);~SpeedoMeterWidget();void changeSpeed();protected:virtual void timerEvent( QTimerEvent* event );private:Ui::SpeedoMeterWidget *ui;int m_timerId;
};#endif // SPEEDOMETERWIDGET_H#include "SpeedoMeterWidget.h"
#include "ui_SpeedoMeterWidget.h"
#include "qwt_dial.h"
#include "qwt_round_scale_draw.h"
#include "qwt_dial_needle.h"
#include "SpeedoMeter.h"static QPalette colorTheme( const QColor& base )
{QPalette palette;palette.setColor( QPalette::Base, base );palette.setColor( QPalette::Window, base.darker( 150 ) );palette.setColor( QPalette::Mid, base.darker( 110 ) );palette.setColor( QPalette::Light, base.lighter( 170 ) );palette.setColor( QPalette::Dark, base.darker( 170 ) );palette.setColor( QPalette::Text, base.darker( 200 ).lighter( 800 ) );palette.setColor( QPalette::WindowText, base.darker( 200 ) );return palette;
}static SpeedoMeter *g_dial = nullptr;
SpeedoMeterWidget::SpeedoMeterWidget(QWidget *parent) :QWidget(parent),ui(new Ui::SpeedoMeterWidget)
{ui->setupUi(this);setPalette( colorTheme( QColor( Qt::darkGray ).darker( 150 ) ) );g_dial = new SpeedoMeter(this);g_dial->setFrameShadow( QwtDial::Sunken );ui->verticalLayout->addWidget(g_dial);m_timerId = startTimer( 50 );
}SpeedoMeterWidget::~SpeedoMeterWidget()
{delete ui;
}void SpeedoMeterWidget::changeSpeed()
{static double offset = 0.8;double speed = g_dial->value();if ( ( speed < 7.0 && offset < 0.0 ) ||( speed > 203.0 && offset > 0.0 ) ){offset = -offset;}static int counter = 0;switch( counter++ % 12 ){case 0:case 2:case 7:case 8:break;default:g_dial->setValue( speed + offset );}
}void SpeedoMeterWidget::timerEvent(QTimerEvent *event)
{if ( event->timerId() == m_timerId ){changeSpeed();return;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/177177.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云轻量服务器“镜像类型”以及“镜像”选择方法

腾讯云轻量应用服务器镜像类型分为应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像&#xff0c;腾讯云百科txybk.com来详细说下不同镜像类型说明和详细介绍&#xff1a; 轻量应用服务器镜像类型说明 腾讯云轻量应用服务器 应用镜像&#xff1a;独有的应用镜像除了包…

Linux shell编程学习笔记17:for循环语句

Linux Shell 脚本编程和其他编程语言一样&#xff0c;支持算数、关系、布尔、字符串、文件测试等多种运算&#xff0c;同样也需要进行根据条件进行流程控制&#xff0c;提供了if、for、while、until等语句。 之前我们探讨了if语句&#xff0c;现在我们来探讨for循环语句。 Li…

什么是数字展览馆,数字展览馆有什么应用前景

引言&#xff1a; 数字展览馆作为一种新兴的文化艺术展示形式&#xff0c;以数字化技术和虚拟现实为基础&#xff0c;正在逐渐改变传统展览的方式。 一、什么是数字展览馆&#xff1f; 1.定义 数字展览馆是利用数字技术和虚拟现实技术打造的一种线上文化艺术展示平台。通过虚…

【网络协议】聊聊HTTPS协议

前面的文章&#xff0c;我们描述了网络是怎样进行传输数据包的&#xff0c;但是网络是不安全的&#xff0c;对于这种流量门户网站其实还好&#xff0c;对于支付类场景其实容易将数据泄漏&#xff0c;所以安全的方式是通过加密&#xff0c;加密方式主要是对称加密和非对称加密。…

git简单介绍,回车换行问题,倒计时+进度条小程序的实现+代码

目录 git--版本控制工具 介绍 使用 小程序 引入 回车换行问题 缓冲区问题 倒计时 分析 代码 进度条 分析 代码 git--版本控制工具 首先,我们需要下载git : yum install git 介绍 Git是一种分布式版本控制系统&#xff0c;用于跟踪文件和目录的变化并协调多个人之…

常用 sqlite3 命令

本次将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令&#xff0c;这些命令的不同之处在于它们不以分号 ; 结束。 让我们在命令提示符下键入一个简单的 sqlite3 命令&#xff0c;在 SQLite 命令提示符下&#xff0c;您可以使 用各种 …

新晋“断货王”!西圣Olite开放式耳机掀起抢购热潮,双十一首日售罄!

在双十一首日&#xff0c;西圣olite开放式耳机凭借其超高性价比&#xff0c;一举拿下“断货王”称号&#xff0c;在双十一首日已售罄&#xff0c;现在在各大电商平台均显示无货。 这一消息引起了社交媒体的热议&#xff0c;除了其超高性价比&#xff0c;性能可以媲美千元级别耳…

操作系统 day02(特征和发展历程)

一&#xff0c;操作系统的特征 并发和并行 共享 并发和共享互为存在条件 虚拟 异步 综上所述&#xff1a; 二&#xff0c;操作系统的发展历程

使用Ansible中的playbook

目录 1.Playbook的功能 2.YAML 3.YAML列表 4.YAML的字典 5.playbook执行命令 6.playbook的核心组件 7.vim 设定技巧 示例 1.Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 2.YAML #简介# 是一种表达资料序列的格式,类似XML #特…

阿里云无影升级2.0 云电脑解决方案时代到来

10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云宣布无影全新升级2.0&#xff1a;从云电脑到云上解决方案&#xff0c;帮助中小企业更便捷地构建云上办公&#xff0c;并开放无影产品及解决方案能力&#xff0c;为生态合作伙伴提供企业云平台&#xff0c;帮助其打造定制化…

Mozilla Firefox 119 现已可供下载

Mozilla Firefox 119 开源网络浏览器现在可以下载了&#xff0c;是时候先看看它的新功能和改进了。 Firefox 119 改进了 Firefox View 功能&#xff0c;现在可以提供更多内容&#xff0c;如最近关闭的标签页和浏览历史&#xff0c;你可以按日期或网站排序&#xff0c;还支持查…

【设计模式】第24节:行为型模式之“模板方法模式”

一、简介 模板方法模式在一个方法中定义一个算法骨架&#xff0c;并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下&#xff0c;重新定义算法中的某些步骤。 模板模式有两大作用&#xff1a;复用和扩展。其中&#xff0c;复用指的是&#…

10.31日模拟赛总结

文章目录 考试时间及策略考试结果考试反思题解A.进步科学B.吉吉没急C.老杰克哒D.季积晓淆 考试时间及策略 没啥好说的&#xff0c;因为好像都不会。所以全场感觉都在罚坐&#xff0c;很痛苦。 考试结果 30 0 50 5 85 考试反思 T1&#xff1a;T1是个神奇状压&#xff0…

【java学习—十一】泛型(1)

文章目录 1. 为什么要有泛型Generic2. 泛型怎么用2.1. 泛型类2.2. 泛型接口2.3. 泛型方法 3. 泛型通配符3.1. 通配符3.2. 有限制的通配符 1. 为什么要有泛型Generic 泛型&#xff0c;JDK1.5新加入的&#xff0c;解决数据类型的安全性问题&#xff0c;其主要原理是在类声明时通过…

通过Google搜索广告传送的携带木马的PyCharm软件版本

导语 最近&#xff0c;一起新的恶意广告活动被发现&#xff0c;利用被入侵的网站通过Google搜索结果推广虚假版本的PyCharm软件。这个活动利用了动态搜索广告&#xff0c;将广告链接指向被黑客篡改的网页&#xff0c;用户点击链接后下载的并不是PyCharm软件&#xff0c;而是多种…

矢量图形编辑软件illustrator 2023 mac中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软…

leetcode:1446. 连续字符(python3解法)

难度&#xff1a;简单 给你一个字符串 s &#xff0c;字符串的「能量」定义为&#xff1a;只包含一种字符的最长非空子字符串的长度。 请你返回字符串 s 的 能量。 示例 1&#xff1a; 输入&#xff1a;s "leetcode" 输出&#xff1a;2 解释&#xff1a;子字符串 &q…

Spire.doc读取模板文档,并在书签处插入内容

在书签位置插入文字 //加载模板文档 Document document new Document(Server.MapPath("~/File/评价结果.doc")); //创建书签导航器 BookmarksNavigator bn new BookmarksNavigator(document); //添加一个section到文档 Section newSec document.AddSection(); …

Java设计模式之命令模式

目录 定义 结构 案例 优点 缺点 使用场景 JDK源码解析 Thread中start与run方法的区别 定义 将一个请求封装为一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行存储、传递、调用、增…

字体文件名称成中的Bold, Light,Italic,Regular, Medium是什么意思?

解释 字体文件名&#xff1a; IntelOneMono-Bold.ttf其中IntelOneMono字体名称 Bold 字体的样式 .ttf字体后缀 样式英文 中文Bold粗体BoldItalic粗体斜体Italic斜体Light细体LightItalic斜细体Medium中等MediumItalic中等斜体Regular标准以下来自鸿蒙字体以下来自鸿蒙字体TC…