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

相关推荐
浆果02079 小时前
NanoTrack C++ — RK3588 实时目标跟踪
c++·目标跟踪·rk3588
ysa05103010 小时前
【并查集】判环
c++·笔记·算法
持力行10 小时前
C/C++ 中的 char*:它标识数组吗?为什么能用下标访问?
c语言·c++
qq_4017004111 小时前
Qt QSS 完全入门写出漂亮界面以及解决样式不生效问题
开发语言·qt
汉克老师11 小时前
GESP2026年6月认证C++六级( 第三部分编程题(2、满二叉树))精讲
c++·深度优先·树形dp·满二叉树·gesp六级·树形dfs
踮起脚看烟花12 小时前
多人聊天室实现v2.0
c++·信息与通信
梦帮科技12 小时前
UE5 GAS 实战:用 Gameplay Ability System 搭建「赛博修真」境界与技能体系
c++·人工智能·python·ue5·c#
旖-旎12 小时前
QT系统篇(5)(下)
开发语言·c++·qt
Irissgwe12 小时前
第四章 QT窗口
qt
99乘法口诀万物皆可变12 小时前
PcanToVectorXL_V01:打通 Vector 与 PCAN 的双向 CAN/CAN‑FD 桥梁
c++·学习