QT绘制led灯(附完整源码)
#include <QApplication>
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>
class LedWidget : public QWidget {
public:
LedWidget(QWidget *parent = nullptr) : QWidget(parent), m_on(false) {
setFixedSize(100, 100);
}
void setOn(bool on) {
m_on = on;
update();
}
protected:
void paintEvent(QPaintEvent *event) override {
Q_UNUSED(event);
QPainter painter(this);
int width = this->width();
int height = this->height();
// 设置绘制参数
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::NoPen);
// 创建路径
QPainterPath path;
// 计算半径和中心位置
int radius = qMin(width, height) / 2;
int centerX = width / 2;
int centerY = height / 2;
// 添加外圆
path.addEllipse(centerX - radius, centerY - radius, 2 * radius, 2 * radius);
// 添加内圆
radius -= 10;
path.addEllipse(centerX - radius, centerY - radius, 2 * radius, 2 * radius);
// 设置画刷颜色
QColor color = m_on ? Qt::red : Qt::darkGray;
painter.setBrush(color);
// 绘制LED灯
painter.drawPath(path);
}
private:
bool m_on;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
LedWidget ledWidget;
ledWidget.show();
// 测试:设置LED灯为开启状态
ledWidget.setOn(true);
return app.exec();
}