博客
关于我
Qt LED 开关效果
阅读量:619 次
发布时间:2019-03-13

本文共 3319 字,大约阅读时间需要 11 分钟。

Qt LED 开关效果

Qt Led开关效果

以下源码来自开源项目

程序效果

在这里插入图片描述

hled.h

#ifndef HLED_H#define HLED_H#include 
class QColor;class HLed : public QWidget{ Q_OBJECTpublic: HLed(QWidget *parent = 0); ~HLed(); QColor color() const; QSize sizeHint() const; QSize minimumSizeHint() const;public slots: void setColor(const QColor &color); void toggle(); void turnOn(bool on=true); void turnOff(bool off=true);protected: void paintEvent(QPaintEvent *); int ledWidth() const;private: struct Private; Private * const m_d;};#endif // HLED_H

hled.cpp

#include 
#include "hled.h"struct HLed::Private{ public: Private() : darkerFactor(300), color(Qt::green), isOn(true) { } int darkerFactor; QColor color; bool isOn;};HLed::HLed(QWidget *parent) :QWidget(parent), m_d(new Private){ }HLed::~HLed(){ delete m_d;}QColor HLed::color() const{ return m_d->color;}void HLed::setColor(const QColor &color){ if (m_d->color == color) return; update();}QSize HLed::sizeHint() const{ return QSize(20, 20);}QSize HLed::minimumSizeHint() const{ return QSize(16, 16);}void HLed::toggle(){ m_d->isOn = !m_d->isOn; update();}void HLed::turnOn(bool on){ m_d->isOn = on; update();}void HLed::turnOff(bool off){ turnOn(!off);}void HLed::paintEvent(QPaintEvent * /*event*/){ int width = ledWidth(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QColor color = m_d->isOn ? m_d->color : m_d->color.darker(m_d->darkerFactor); QBrush brush; brush.setStyle(Qt::SolidPattern); brush.setColor(color); painter.setBrush(brush); // draw plain painter.drawEllipse(1, 1, width-1, width-1); QPen pen; pen.setWidth(2); int pos = width / 5 + 1; int lightWidth = width * 2 / 3; int lightQuote = 130 * 2 / (lightWidth ? lightWidth : 1) + 100; // draw bright spot while (lightWidth) { color = color.lighter(lightQuote); pen.setColor(color); painter.setPen(pen); painter.drawEllipse(pos, pos, lightWidth, lightWidth); lightWidth--; if (!lightWidth) break; painter.drawEllipse(pos, pos, lightWidth, lightWidth); lightWidth--; if (!lightWidth) break; painter.drawEllipse(pos, pos, lightWidth, lightWidth); pos++; lightWidth--; } //draw border painter.setBrush(Qt::NoBrush); int angle = -720; color = palette().color(QPalette::Light); for (int arc=120; arc<2880; arc+=240) { pen.setColor(color); painter.setPen(pen); int w = width - pen.width()/2; painter.drawArc(pen.width()/2, pen.width()/2, w, w, angle+arc, 240); painter.drawArc(pen.width()/2, pen.width()/2, w, w, angle-arc, 240); color = color.darker(110); }}int HLed::ledWidth() const{ int width = qMin(this->width(), this->height()); width -= 2; return width > 0 ? width : 0;}

调用示例

HLed *led;led = new HLed(Dialog);led->setObjectName(QString::fromUtf8("led"));led->setSizePolicy(sizePolicy);led->setMinimumSize(QSize(20, 20));led->setMaximumSize(QSize(25, 25));horizontalLayout->addWidget(led);led->turnOff();//默认关闭//update led's statusled->turnOn(port->isOpen());

源码下载

Github无法访问时可以通过下发地址直接下载

转载地址:http://hwxaz.baihongyu.com/

你可能感兴趣的文章
MyEclipse配置SVN
查看>>
MTCNN 人脸检测
查看>>
MyEcplise中SpringBoot怎样定制启动banner?
查看>>
MyPython
查看>>
MTD技术介绍
查看>>
MySQL
查看>>
MySQL
查看>>
mysql
查看>>
MTK Android 如何获取系统权限
查看>>
MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>
mysql - 视图
查看>>
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql -存储过程
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>