Qt中用QLabel创建状态灯

首先ui设计中分别创建了4个大灯和4个小灯。

编辑.h文件

cpp 复制代码
#ifndef LED_H
#define LED_H

#include <QWidget>
#include <QLabel>

QT_BEGIN_NAMESPACE
namespace Ui { class Led; }
QT_END_NAMESPACE

class Led : public QWidget
{
    Q_OBJECT

public:
    Led(QWidget *parent = nullptr);
    ~Led();

private:
    void initData();
    void initUi();

private:
    Ui::Led *ui;
    QVector<QString> color_s;   ///< 存放设置小灯的样式字符串
    QVector<QString> color_b;   ///< 存放设置大灯的样式字符串
    enum colorType {GREY = 0, RED, GREEN, YELLOW};  ///< 灯颜色枚举
};
#endif // LED_H

编辑.cpp文件

cpp 复制代码
#include "led.h"
#include "ui_led.h"

Led::Led(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Led)
{
    ui->setupUi(this);
    initData();
    initUi();
}

Led::~Led()
{
    delete ui;
}

void Led::initData()
{
    QString comm_s("min-width:20px;min-height:20px;max-width:20px;max-height:20px;border-radius:13px;border:3px rgb(147, 147, 147);border-style:outset;");
    color_s.push_back(comm_s + QString("background-color:rgb(195, 195, 195);"));    ///< GREY
    color_s.push_back(comm_s + QString("background-color:rgb(255, 0, 0);"));        ///< RED
    color_s.push_back(comm_s + QString("background-color:rgb(0, 255, 0);"));        ///< GREEN
    color_s.push_back(comm_s + QString("background-color:rgb(255, 255, 0);"));      ///< YELLOW

    QString comm_b("min-width:34px;min-height:34px;max-width:34px;max-height:34px;border-radius:20px;border:3px rgb(147, 147, 147);border-style:outset;");
    color_b.push_back(comm_b + QString("background-color:rgb(195, 195, 195);"));    ///< GREY
    color_b.push_back(comm_b + QString("background-color:rgb(255, 0, 0);"));        ///< RED
    color_b.push_back(comm_b + QString("background-color:rgb(0, 255, 0);"));        ///< GREEN
    color_b.push_back(comm_b + QString("background-color:rgb(255, 255, 0);"));      ///< YELLOW
}

void Led::initUi()
{
    ui->leds1->setStyleSheet(color_s[colorType::GREY]);
    ui->ledb1->setStyleSheet(color_b[colorType::GREY]);

    ui->leds2->setStyleSheet(color_s[colorType::RED]);
    ui->ledb2->setStyleSheet(color_b[colorType::RED]);

    ui->leds3->setStyleSheet(color_s[colorType::GREEN]);
    ui->ledb3->setStyleSheet(color_b[colorType::GREEN]);

    ui->leds4->setStyleSheet(color_s[colorType::YELLOW]);
    ui->ledb4->setStyleSheet(color_b[colorType::YELLOW]);
}

效果这样:

相关推荐
车载小杜1 小时前
基于指针的线程池
开发语言·c++
AAA废品回收站陈师傅3 小时前
19信号和槽_信号和槽的基本概念
qt
爱吃巧克力的程序媛3 小时前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
云 无 心 以 出 岫3 小时前
贪心算法QwQ
数据结构·c++·算法·贪心算法
AAA废品回收站陈师傅4 小时前
18认识Qt坐标系
qt
m0_555762904 小时前
QT 动态布局实现(待完善)
服务器·数据库·qt
换一颗红豆4 小时前
【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“
c++
随便昵称4 小时前
蓝桥杯专项复习——前缀和和差分
c++·算法·前缀和·蓝桥杯
commonbelive4 小时前
团体程序设计天梯赛——L1-100 四项全能
c++
genispan4 小时前
QT/C++ 多线程并发下载实践
开发语言·c++·qt