qwidget实现led灯
时间: 2023-12-19 17:05:19 浏览: 31
要在Qt中实现一个LED灯效果,可以使用QWidget类自定义一个LED小部件。以下是一个简单的示例代码:
```cpp
#include <QtWidgets>
class LEDWidget : public QWidget {
public:
LEDWidget(QWidget *parent = nullptr) : QWidget(parent), m_on(false) {
setFixedSize(20, 20); // 设置小部件的固定大小
}
void setOn(bool on) {
m_on = on;
update(); // 更新小部件的绘制
}
protected:
void paintEvent(QPaintEvent *event) override {
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿
painter.setBrush(m_on ? Qt::red : Qt::darkRed); // 根据状态设置画刷颜色
QRectF rect(0, 0, width(), height());
painter.drawEllipse(rect); // 在小部件内绘制圆形
if (m_on) {
painter.setPen(Qt::white);
painter.drawEllipse(rect.adjusted(2, 2, -2, -2)); // 绘制内部的白色圆形
}
}
private:
bool m_on;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
LEDWidget ledWidget;
ledWidget.show();
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, [&ledWidget]() {
static bool on = false;
ledWidget.setOn(on);
on = !on;
});
timer.start(500); // 每隔500毫秒切换LED灯的状态
return app.exec();
}
```
在上面的示例中,我们创建了一个名为LEDWidget的自定义QWidget类,它重写了paintEvent()函数来绘制LED灯的效果。通过设置painter的画刷颜色和绘制圆形,我们可以实现LED灯的开关效果。在main()函数中,我们创建了一个LEDWidget实例,并使用QTimer定时器来切换LED灯的状态。