博客
关于我
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 order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>