博客
关于我
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/

你可能感兴趣的文章
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>
MySQL Cluster与MGR集群实战
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>