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

相关推荐
无名猿38 分钟前
list 与 forward_list:链表真的比 vector 快吗
c++·性能优化·stl·内存管理·标准库
笑鸿的学习笔记41 分钟前
C++笔记之SIMD与SSE指令集
开发语言·c++·笔记
汉克老师1 小时前
GESP2026年9月认证C++一级( 第二部分判断题(1~10题)精讲
c++·gesp·小学生·学c++编程
一只旭宝2 小时前
C++ 后端开发面试题整理
java·c++·面试
xlq223222 小时前
全面复习1
c++
Dylan的码园2 小时前
求平均成绩 矩阵数据处理 【循环处理 二维数组】
c++·线性代数·矩阵
Cx330❀2 小时前
【Qt 进阶指南】详解 Qt 常用标准对话框与主窗口组件架构
开发语言·qt·ui·性能优化·架构·图形渲染
All for pursuit.2 小时前
【回溯-2】22.括号生成
数据结构·c++·算法·leetcode
longlongzihan2 小时前
LeetCode 1004.最大连续1的个数III 滑动窗口及动态规划题解
c++·算法·leetcode·dp·滑动窗口
朝朝辞暮i2 小时前
C++ 第 22 课:const —— 不允许随便修改的数据
开发语言·c++·算法