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

相关推荐
狗蛋儿l39 分钟前
qt 3d航迹图
开发语言·qt·3d
努力努力再努力wz1 小时前
【Linux实践系列】:进程间通信:万字详解命名管道实现通信
android·linux·运维·服务器·c++·c
炯哈哈2 小时前
【上位机——MFC】文档
开发语言·c++·mfc·上位机
愚润求学2 小时前
【C++11】可变参数模板
开发语言·c++·笔记·c++11·模板
WW_千谷山4_sch2 小时前
MYOJ_1349:(洛谷P3951)[NOIP 2017 提高组] 小凯的疑惑(数学公式套用,两步搞定代码)
c++·算法
共享家95273 小时前
深入探究C++ 中的stack、queue和deque
c++
How_doyou_do3 小时前
项目实战-贪吃蛇大作战【补档】
c语言·c++·visual studio
Ethon_王3 小时前
走进Qt--信号与槽机制详解与实战
c++·qt
小卡皮巴拉3 小时前
【力扣刷题实战】丢失的数字
c++·算法·leetcode·位运算
凤年徐3 小时前
【C/C++】深入理解指针(六)
c语言·开发语言·c++·经验分享·笔记·指针