qt-C++笔记之使用QLabel和QPushButton实现一个bool状态的指示灯

qt-C++笔记之使用QLabel和QPushButton实现一个bool状态的指示灯

code review!

1.QPushButton实现

运行
在这里插入图片描述

在这里插入图片描述

代码

#include <QtWidgets>

class IndicatorLight : public QPushButton
{
   
public:
    IndicatorLight(QWidget *parent = nullptr) : QPushButton(parent)
    {
   
        setCheckable(true);
        setFixedSize(30, 30);

        updateButtonStyle();
    }

    void setState(bool state)
    {
   
        setChecked(state);
        updateButtonStyle();
    }

private:
    void updateButtonStyle()
    {
   
        if (isChecked())
        {
   
            setStyleSheet("QPushButton { background-color: green; }");
            setText("ON");
        }
        else
        {
   
            setStyleSheet("QPushButton { background-color: red; }");
            setText("OFF");
        }
    }
};

int main(int argc, char *argv[])
{
   
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout layout(&window);

    IndicatorLight indicatorLight;
    layout.addWidget(&indicatorLight);

    QPushButton controlButton("Toggle");
    QObject::connect(&controlButton, &QPushButton::clicked, [&indicatorLight]() {
   
        indicatorLight.setState(!indicatorLight.isChecked());
    });
    layout.addWidget(&controlButton);

    window.show();

    return app.exec();
}

2.QLabel实现

运行
在这里插入图片描述

在这里插入图片描述

代码

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>

class IndicatorLight : public QWidget {
   
public:
    IndicatorLight(QWidget *parent = nullptr) : QWidget(parent) {
   
        setFixedSize(100, 100);
        setWindowTitle("Indicator Light");

        // 创建标签用于显示指示灯状态
        label = new QLabel(this);
        label->setGeometry(40, 40, 20, 20);
        updateLabel();

        // 创建按钮用于切换指示灯状态
        button = new QPushButton("Toggle", this);
        button->setGeometry(10, 70, 80, 20);
        connect(button, &QPushButton::clicked, this, &IndicatorLight::toggleState);
    }

    void toggleState() {
   
        // 切换状态
        state = !state;
        updateLabel();
    }

    void updateLabel() {
   
        // 根据状态设置标签的背景颜色
        if (state) {
   
            label->setStyleSheet("background-color: green; border-radius: 10px");
        } else {
   
            label->setStyleSheet("background-color: red; border-radius: 10px");
        }
    }

private:
    QLabel *label;
    QPushButton *button;
    bool state = false;
};

int main(int argc, char *argv[]) {
   
    QApplication app(argc, argv);

    IndicatorLight indicatorLight;
    indicatorLight.show();

    return app.exec();
}

2.QLabel实现-对错符号

运行
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QIcon>

int main(int argc, char *argv[])
{
   
    QApplication app(argc, argv);

    // 创建一个QWidget作为主窗口
    QWidget *window = new QWidget();

    // 创建一个布局管理器
    QVBoxLayout *layout = new QVBoxLayout(window);

    // 创建一个QLabel对象
    QLabel *indicatorLabel = new QLabel();

    // 设置初始状态为关闭
    bool isOn = false;
    if (isOn) {
   
        indicatorLabel->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(32, 32));
    } else {
   
        indicatorLabel->setPixmap(QIcon::fromTheme("dialog-cancel").pixmap(32, 32));
    }

    // 将QLabel添加到布局管理器中
    layout->addWidget(indicatorLabel);

    // 创建一个QPushButton对象
    QPushButton *toggleButton = new QPushButton("Toggle");

    // 将按钮与槽函数连接
    QObject::connect(toggleButton, &QPushButton::clicked, [&]() {
   
        isOn = !isOn;
        if (isOn) {
   
            indicatorLabel->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(32, 32));
        } else {
   
            indicatorLabel->setPixmap(QIcon::fromTheme("dialog-cancel").pixmap(32, 32));
        }
    });

    // 将按钮添加到布局管理器中
    layout->addWidget(toggleButton);

    // 设置主窗口的布局管理器
    window->setLayout(layout);

    // 显示主窗口
    window->show();

    return app.exec();
}

在这里插入图片描述
在这里插入图片描述

相关推荐

  1. Qt设置QLabel背景色前景色

    2023-12-21 13:22:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 13:22:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 13:22:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 13:22:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 13:22:01       18 阅读

热门阅读

  1. Ubuntu Docker图形界面实现

    2023-12-21 13:22:01       40 阅读
  2. C++高级:深拷贝与浅拷贝在嵌入式系统中的应用

    2023-12-21 13:22:01       41 阅读
  3. uni-app 微信小程序蓝牙模块的解耦封装-持续更新

    2023-12-21 13:22:01       32 阅读
  4. 速盾网络:网络安全守护者

    2023-12-21 13:22:01       45 阅读
  5. SpringBoot缓存注解@Cacheable使用姿势介绍

    2023-12-21 13:22:01       42 阅读
  6. 算法:从入门到变通

    2023-12-21 13:22:01       40 阅读
  7. 面试算法63:替换单词

    2023-12-21 13:22:01       39 阅读
  8. 在spring boot项目引入mybatis plus后的的案例实践

    2023-12-21 13:22:01       44 阅读
  9. Rust中Result处理方式

    2023-12-21 13:22:01       33 阅读
  10. 力扣题目学习笔记(OC + Swift)16. 最接近的三数之和

    2023-12-21 13:22:01       41 阅读