QT C++ QButtonGroup应用

//QT 中,按钮数量比较少,可以分别用各按钮的信号和槽处理。

//当按钮数量较多时,用QButtonGroup可以实现共用一个槽函数,批量处理,减少垃圾代码,

//减少出错。

**//开发平台:win10+**QT6.2.4 MSVC2019 64 bit

//1.画面

//2.头文件

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QButtonGroup>
#include <QList>
#include <QTimer>

QT_BEGIN_NAMESPACE

namespace Ui {

class Widget;

}

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

private:

Ui::Widget *ui;

void initGroupBoxPLCOutButton() ;

QButtonGroup * btnGroup=nullptr;

QTimer *timer2=nullptr;

void DispButtons();

private slots:

void OnButtonGroup(QAbstractButton *button, bool checked);

void loop2();

};

#endif // WIDGET_H

//3. cpp文件

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

initGroupBoxPLCOutButton();

timer2=new QTimer(this);

connect(timer2, SIGNAL(timeout()), this, SLOT(loop2())); // SLOT填入一个槽函数

timer2->start(100); // 100毫秒, 等于 1 秒

}

Widget::~Widget()

{

delete ui;

}

void Widget::initGroupBoxPLCOutButton()

{

btnGroup=new QButtonGroup(this);

btnGroup->addButton(ui->bt_Y00,0);

btnGroup->addButton(ui->bt_Y01,1);

btnGroup->addButton(ui->bt_Y02,2);
btnGroup->setExclusive(false);

QString color_off="background-color: rgb(150, 150, 150)";

QList buttonList = btnGroup->buttons();

for (int i = 0; i < buttonList.count(); i++) {

QAbstractButton *button = buttonList.at(i);

button->setCheckable(true);

button->setStyleSheet(color_off);

button->setFixedSize(30, 30);

button->setText("");

}

connect(btnGroup, SIGNAL(buttonToggled(QAbstractButton *, bool)), this, SLOT(OnButtonGroup(QAbstractButton *, bool)));

}

void Widget::OnButtonGroup(QAbstractButton *button, bool checked)

{

//qDebug() << "OnButtonGroup";

unsigned int out=0;

unsigned int temp =1;

if(button != NULL)

{

qDebug() << button->objectName();

qDebug() << checked;

QString str;

QList buttonList = btnGroup->buttons();

for (int i = 0; i < buttonList.count(); i++)

{

QAbstractButton *bt = buttonList.at(i);

if (bt->isChecked())

{

out=out | temp;

}

temp*=2;

if(bt==button)

{

str="输出点";

str+=QString::number(i);

str+="=";

str+=checked?"on":"off";

}

}

qDebug()<<str;

}

}

void Widget::loop2()

{

DispButtons();

}

void Widget::DispButtons()//显示按钮不同状态的颜色

{

QList buttonList = btnGroup->buttons();

QString color_on="background-color: rgb(0, 255, 0)";//按下,绿

QString color_off="background-color: rgb(111, 111, 111)";//未按下

for (int i = 0; i < buttonList.count(); i++)

{

QAbstractButton *button = buttonList.at(i);

if (button->isChecked())

button->setStyleSheet(color_on);

else

button->setStyleSheet(color_off);

}

}

//4.代码下载链接:

https://download.csdn.net/download/weixin_39926429/88975226

相关推荐
凉茶钱1 小时前
红黑树:用“颜色”换“平衡”,set 与 map 的底层发动机
开发语言·c++·红黑树
octopus_c2 小时前
C++ 模板详解:函数模板、类模板、特化与分离编译
开发语言·c++·算法
東隅已逝,桑榆非晚2 小时前
算法1. 双指针法-移动零
c++·算法
悠仁さん3 小时前
【C++】set map 使用
java·前端·c++
艾莉丝努力练剑4 小时前
【AI大模型接入SDK】ChatServer问题修复
c++·学习·ai·大模型·sdk
扶尔魔ocy4 小时前
【QT C++】常用设计模式
c++·设计模式
晚风予卿云月4 小时前
【C++高并发内存池】 2.ThreadCache设计
开发语言·c++·高并发内存池·tcmalloc
東隅已逝,桑榆非晚5 小时前
红黑树:从概念到实现
数据结构·c++·笔记·学习
艾莉丝努力练剑6 小时前
【AI大模型接入SDK】ChatServer接口测试
网络·c++·人工智能·学习·ai·大模型·sdk
蓝祁子yoky6 小时前
Qt学习日记 Day15:网络编程(二)- UDP基础
网络·qt·学习