Qt 封装一个简单的LED(指示灯)控件
1,效果~
- 所以
- 这个简单的LED类可以自定义大小~
- 可以点亮或熄灭,也可以闪烁👁️~
- 闪烁的时间间隔⌛可自定义,只需要在设置闪烁状态前调用类的
setInterval(msec)
函数~ - 有几种预定义的颜色(红🔴、绿🟢、蓝🔵、黄🟡和橘色🟠),也提供自定义颜色的函数~
- 如果还满足不了需要,就得自己扩展🧑🔧了,类很小,这也很方便~
- 工程文件中有这个例子代码,可以当作用法入门,其实只是引入头文件,定义类对象,然后当一个普通控件(如:
QPushButton
)来用~ - 最简单的方法是把类文件
QSimpleLed.h
和QSimpleLed.cpp
拷到自己工程里,然后在需要使用的文件里包含。类代码对Qt版本没有特别要求~ - 差不多了,有了上面这几点提示,从下面下载文件try try💪💪💪,如果还有其它问题,欢迎在下面留个评论~
- 另外下面第三部分是实现过程中的一些要点~
2,资源文件
- 下载链接:链接:https://share.weiyun.com/5HK0503W 密码:rxdmyk
- 工程文件结构
QtSimpleLed.h
和QtSimpleLed.cpp
是封装的LED类
mainwindow.h
和mainwindow.cpp
里面有例子
其它是Qt建工程时自己生成的。
3,关于例子
QTimer::singleShot(200/7.0*1, nullptr, [&]() {
stepLed01->setStates(QSimpleLed::BLINK);
});
- 上面的代码是例子中设置LED闪烁的,用了lamda(C++11引入),第一次接触可以不太懂,意思是:
200/7.0*1
秒后执行一下这个代码块{ stepLed01->setStates(QSimpleLed::BLINK); }
- 用传统写法:
// 定义一个定时器
// 将定时器设置成一次触发(singleShot)类型
// 定义一个slot里面是 stepLed01->setStates(QSimpleLed::BLINK);
// 连接定时器的timeout信号和这个slot
// 调用start()启动定时器
- 所以这样步骤比较繁琐,第一次接触可以看看C++ lamda的语法,用起来非常容易,毕竟总是先有了第一次才会有第二次~🙂
4,实现过程关键点…
-
这地写实现过程中的一些想法。
-
整体思路是继承
QAbstractButton
类然后实现其重绘(paintEvent()
)虚函数,最后绘制我们想要的效果:
-
下面的问题是怎样实现LED所表现出来的效果了:
-
这里主要用到了颜色渐变效果,这点我在之前的一个blog中说的足够多:👇👇👇
一文搞懂Qt颜色渐变 - https://blog.csdn.net/weixin_37818081/articl