QT自定义控件之车辆远近光灯
基于QT 设计实现的车辆远近光灯控件.
1.设计说明
基于QWidget设计实现,通过重构QPaintEvent事件,绘制出的车辆远近光灯控件,可通过QWidget提升方法,应用于项目中.
2.核心代码:
#ifndef QCUSTOMHIGHLOWBEAM_H
#define QCUSTOMHIGHLOWBEAM_H#include <QWidget>
#include <QPainter>/*** @brief Feature:* Support* Support* Support* Support*/#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endifclass QDESIGNER_WIDGET_EXPORT QCustomMobileSignal : public QWidget
#else
class QCustomHighLowBeam : public QWidget
#endif
{Q_OBJECT
// Q_PROPERTY()
public:explicit QCustomHighLowBeam(QWidget *parent = nullptr);~QCustomHighLowBeam();protected:QSize sizeHint() const;QSize minimumSizeHint() const;void paintEvent(QPaintEvent *);void resizeEvent(QResizeEvent *);void drawBackground(QPainter *painter);void drawHighBeam(QPainter *painter);void drawLowBeam(QPainter *painter);
private:QColor m_active_color_;QColor m_unactive_color_;// false:unactive true:activebool m_highbeam_active_{false};bool m_lowbeam_active_{false};QColor m_background_color_;
signals:public slots:void setHighBeamState(bool value);void setLowBeamState(bool value);
};#endif // QCUSTOMHIGHLOWBEAM_H
#include "qcustomhighlowbeam.h"QCustomHighLowBeam::QCustomHighLowBeam(QWidget *parent) : QWidget(parent)
{m_background_color_ = QColor(55,107,154, 30);m_active_color_ = Qt::yellow;m_unactive_color_ = Qt::gray;}QCustomHighLowBeam::~QCustomHighLowBeam()
{}void QCustomHighLowBeam::resizeEvent(QResizeEvent *)
{this->repaint();
}QSize QCustomHighLowBeam::sizeHint() const
{return QSize(150, 150);
}QSize QCustomHighLowBeam::minimumSizeHint() const
{return QSize(30, 30);
}void QCustomHighLowBeam::paintEvent(QPaintEvent *)
{int width = this->width();int height = this->height();int side = qMin(width, height);//绘制准备工作,启用反锯齿,平移坐标轴中心,等比例缩放QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);painter.translate(width / 2, height / 2);painter.scale(side / 200.0, side / 200.0);drawBackground(&painter);drawHighBeam(&painter);drawLowBeam(&painter);// drawTitle(&painter);// drawTimeCost(&painter);// drawSystemTime(&painter);
}void QCustomHighLowBeam::drawBackground(QPainter *painter)
{int width = this->width();int height = this->height();int side = qMin(width, height);painter->save();painter->setBrush(m_background_color_);painter->drawRect(-width, -height, width * 2, height * 2);painter->restore();
}void QCustomHighLowBeam::drawHighBeam(QPainter *painter)
{int width = this->width();int height = this->height();int side = qMin(width, height);QLine lines[] = {{-25, -20, -5, -20},{-25, -10, -5, -10},{-25, 0, -5, 0},{-25, 10, -5, 10},{-25, 20, -5, 20},{-25, 20, -5, 20},{ 2, -30, 2, 30}};painter->save();if (m_highbeam_active_){painter->setPen(QPen(m_active_color_, 4));} else {painter->setPen(QPen(m_unactive_color_, 4));}painter->drawLines(lines, (sizeof(lines)/sizeof (lines[0])));QRectF rectangle(-50.0, -30.0, 105.0, 60.0);int startAngle = 90 * 16;int spanAngle = -180 * 16;painter->drawArc(rectangle, startAngle, spanAngle);painter->restore();
}void QCustomHighLowBeam::drawLowBeam(QPainter *painter)
{int width = this->width();int height = this->height();int side = qMin(width, height);int offset = 100;QLine lines[] = {{-25+offset, -15, -5+offset, -25},{-25+offset, -5, -5+offset, -15},{-25+offset, 5, -5+offset, -5},{-25+offset, 15, -5+offset, 5},{-25+offset, 25, -5+offset, 15},{-25+offset, 35, -5+offset, 25},{ 2+offset, -30, 2+offset, 30}};painter->save();if (m_lowbeam_active_){painter->setPen(QPen(m_active_color_, 4));} else {painter->setPen(QPen(m_unactive_color_, 4));}painter->drawLines(lines, (sizeof(lines)/sizeof (lines[0])));QRectF rectangle(-50.0+offset, -30.0, 105.0, 60.0);int startAngle = 90 * 16;int spanAngle = -180 * 16;painter->drawArc(rectangle, startAngle, spanAngle);painter->restore();
}void QCustomHighLowBeam::setHighBeamState(bool value)
{if (this->m_highbeam_active_ != value){this->m_highbeam_active_ = value;this->update();}
}void QCustomHighLowBeam::setLowBeamState(bool value)
{if (this->m_lowbeam_active_ != value){this->m_lowbeam_active_ = value;this->update();}
}
3.效果示意图
QT自定义控件之车辆远近光灯相关推荐
- 基于51单片机的汽车自动照明灯超声波光敏检测远近光灯方案原理图设计
系统的功能分析及体系结构设计 (附文件) 系统功能分析 本设计由STC89C52单片机+光照检测电路(光敏电阻)+超声波HC-SR04模块电路+4位高亮白色LED灯+黄绿LED指示灯电路+拨动开关电路 ...
- 基于51单片机远近光灯切换电路设计方案
STC89C52单片机设计, 自动模式:通过光敏电阻检测光照强度,正常情况下,白天灯不亮,晚上的时候开启远光灯,通过超声波检测距离,如果距离小于30cm,那么远光灯转化为近光灯,超过30cm,近光灯转 ...
- 汽车车灯控制电路模型(转向灯/示廓灯/远近光灯/雾灯/日间行车灯)
和之前的博客"汽车转向灯控制电路模型"不同的是, 这里除了对转向灯的设计外, 还加入了示廓灯.远近光灯.雾灯.日间行车灯的设计部分. 这里我感觉有必要对博客"汽车转向灯控 ...
- Qt自定义控件创建和使用
Qt自定义控件创建和使用 Qt中很方便的是使用各种自定义控件来分模块实现各种子功能,用于实现代码的解耦: 之前在使用Qt 5.12创建自定义控件时,出现了各种问题,多次重装QtCreator和VS,屡 ...
- Qt自定义控件之仪表盘的完整实现
概述 基于QT的仪表盘有很多种办法,比如使用QWT,ChartDirector 或H5混合的echart组件,或者基于QT的绘图功能绘制,或者基于美工提供的图片的基础上增加动态效果.然而搞明白QT自定 ...
- Qt自定义控件(IP输入框,windows下)
1.建立自定义控件项目 组代表后来能从哪里找到 剩下的点"下一步"就行了 2.编辑代码 在生成项目的cpp中添加自己的内容(没有.ui界面了,设计tab是灰色的) 放一下我的代码 ...
- Qt自定义控件------SwitchButton
简介 一般用来两种互斥状态的切换. 效果 下面放效果图 控件拆分 一.控件大体有两部分组成,一个是背景,一个是白色的滑块.原本背景是想用QWidget然后直接设置圆角的,然后发现效果很差.所以背景 ...
- linux qt 自定义控件,编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件...
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:"升级(promo ...
- 基于51单片机汽车自动照明灯远近光灯proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.该系统采用的是两个USB小灯作为模拟汽车远光灯和近光灯 2.采用HC-SR04超声波模块模拟汽车障碍物检测系统 3.采用光敏电阻来检测环境光,汽车 ...
最新文章
- 调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array...
- flex swf和movieclip之前的微妙关系
- SAP UI5和微信小程序框架里的全局变量
- 现在女生的床真的都是这样吗?
- 大学生应当趁早谋划未来
- 给楠哥准备的入门单片机
- 部编版是什么版本_部编版是人教版吗
- stateful set 学习笔记
- Linux 之父拒绝 996,Swift、Python 之父痴迷深夜编程,程序员之神的 24 小时!
- java NumberFormat数字格式化
- 五年级上册计算机工作总结,五年级上册数学教学工作总结
- 鲲鹏BoostKit虚拟化使能套件,让数据加密更安全
- 使用SmartUpload的步骤
- 等额本息计算 java 代码
- 数据库系统原理与应用教程(006)—— 编译安装 MySQL5.7(Linux 环境)
- 党团学系统前后端接口文档
- Go语言学习笔记—golang标准库xml包
- Visio 流程图-论文
- 数字电子技术课设--频率计
- phpcms mysql设置_PHPCMS mysql优化教程_PHPCms教程
热门文章
- 微信小程序-音视频剪辑
- 图和两种遍历,Saving James Bond
- 职业作秀V1.7.9更新公告
- python有什么特点有什么应用方向_你知道吗?python特点+可以做什么+就业前景(附30G学习资料)...
- 专业的庆典策划应该注意哪些礼仪
- Picosmos 一键智能抠图
- 设计分享|基于51单片机的数字时钟(汇编)
- Android 触摸OnTouchListener没有响应问题解决
- python缩小图片_python如何缩小图像
- CSS解构系列之-新浪页面解构-01