基于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自定义控件之车辆远近光灯相关推荐

  1. 基于51单片机的汽车自动照明灯超声波光敏检测远近光灯方案原理图设计

    系统的功能分析及体系结构设计 (附文件) 系统功能分析 本设计由STC89C52单片机+光照检测电路(光敏电阻)+超声波HC-SR04模块电路+4位高亮白色LED灯+黄绿LED指示灯电路+拨动开关电路 ...

  2. 基于51单片机远近光灯切换电路设计方案

    STC89C52单片机设计, 自动模式:通过光敏电阻检测光照强度,正常情况下,白天灯不亮,晚上的时候开启远光灯,通过超声波检测距离,如果距离小于30cm,那么远光灯转化为近光灯,超过30cm,近光灯转 ...

  3. 汽车车灯控制电路模型(转向灯/示廓灯/远近光灯/雾灯/日间行车灯)

    和之前的博客"汽车转向灯控制电路模型"不同的是, 这里除了对转向灯的设计外, 还加入了示廓灯.远近光灯.雾灯.日间行车灯的设计部分. 这里我感觉有必要对博客"汽车转向灯控 ...

  4. Qt自定义控件创建和使用

    Qt自定义控件创建和使用 Qt中很方便的是使用各种自定义控件来分模块实现各种子功能,用于实现代码的解耦: 之前在使用Qt 5.12创建自定义控件时,出现了各种问题,多次重装QtCreator和VS,屡 ...

  5. Qt自定义控件之仪表盘的完整实现

    概述 基于QT的仪表盘有很多种办法,比如使用QWT,ChartDirector 或H5混合的echart组件,或者基于QT的绘图功能绘制,或者基于美工提供的图片的基础上增加动态效果.然而搞明白QT自定 ...

  6. Qt自定义控件(IP输入框,windows下)

    1.建立自定义控件项目 组代表后来能从哪里找到 剩下的点"下一步"就行了 2.编辑代码 在生成项目的cpp中添加自己的内容(没有.ui界面了,设计tab是灰色的) 放一下我的代码 ...

  7. Qt自定义控件------SwitchButton

    简介   一般用来两种互斥状态的切换. 效果 下面放效果图 控件拆分 一.控件大体有两部分组成,一个是背景,一个是白色的滑块.原本背景是想用QWidget然后直接设置圆角的,然后发现效果很差.所以背景 ...

  8. linux qt 自定义控件,编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件...

    要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:"升级(promo ...

  9. 基于51单片机汽车自动照明灯远近光灯proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.该系统采用的是两个USB小灯作为模拟汽车远光灯和近光灯 2.采用HC-SR04超声波模块模拟汽车障碍物检测系统 3.采用光敏电阻来检测环境光,汽车 ...

最新文章

  1. 调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array...
  2. flex swf和movieclip之前的微妙关系
  3. SAP UI5和微信小程序框架里的全局变量
  4. 现在女生的床真的都是这样吗?
  5. 大学生应当趁早谋划未来
  6. 给楠哥准备的入门单片机
  7. 部编版是什么版本_部编版是人教版吗
  8. stateful set 学习笔记
  9. Linux 之父拒绝 996,Swift、Python 之父痴迷深夜编程,程序员之神的 24 小时!
  10. java NumberFormat数字格式化
  11. 五年级上册计算机工作总结,五年级上册数学教学工作总结
  12. 鲲鹏BoostKit虚拟化使能套件,让数据加密更安全
  13. 使用SmartUpload的步骤
  14. 等额本息计算 java 代码
  15. 数据库系统原理与应用教程(006)—— 编译安装 MySQL5.7(Linux 环境)
  16. 党团学系统前后端接口文档
  17. Go语言学习笔记—golang标准库xml包
  18. Visio 流程图-论文
  19. 数字电子技术课设--频率计
  20. phpcms mysql设置_PHPCMS mysql优化教程_PHPCms教程

热门文章

  1. 微信小程序-音视频剪辑
  2. 图和两种遍历,Saving James Bond
  3. 职业作秀V1.7.9更新公告
  4. python有什么特点有什么应用方向_你知道吗?python特点+可以做什么+就业前景(附30G学习资料)...
  5. 专业的庆典策划应该注意哪些礼仪
  6. Picosmos 一键智能抠图
  7. 设计分享|基于51单片机的数字时钟(汇编)
  8. Android 触摸OnTouchListener没有响应问题解决
  9. python缩小图片_python如何缩小图像
  10. CSS解构系列之-新浪页面解构-01