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

相关推荐
肆忆_14 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星18 小时前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛3 天前
delete又未完全delete
c++
端平入洛4 天前
auto有时不auto
c++
哇哈哈20214 天前
信号量和信号
linux·c++
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马4 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝4 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc4 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
问好眼4 天前
《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法
c++·算法·位运算·信息学奥赛