博客
关于我
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 sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
MySQL Troubleshoting:Waiting on query cache mutex
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>
MySQL Workbench 使用手册:从入门到精通
查看>>
MySQL Workbench 数据库建模详解:从设计到实践
查看>>
MySQL Workbench 数据建模全解析:从基础到实践
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>
MySQL —— 视图
查看>>
mysql 不区分大小写
查看>>
mysql 两列互转
查看>>