QButtonGroup 是一个按钮组,就是将控件进行组合或分组的一个容器,但是它并不在设计师里面可以直接拉出来用

在使用 QButtonGroup 的时候需要引入一下 #include <QButtonGroup>

1、首先用QT创建一个 widget 项目 ,在 UI 中添加三个选择框

在.pro文件中加入一行 CONFIG += console 可以在运行的时候自动打开控制台

 2、在 widget.cpp 中写入代码 

这里创建了两个槽函数,分别绑定 QButtonGroup 中的 buttonClicked 信号和 buttonToggled 信号

#include "widget.h"
#include "ui_widget.h"
#include <QButtonGroup>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QButtonGroup *group = new QButtonGroup(this);
    // 将UI中创建好的选择框全部加入按钮组
    group->addButton(ui->checkBox1);
    group->addButton(ui->checkBox2);
    group->addButton(ui->checkBox3);

    // 选择框加入按钮组以后会默认变成单选  ,在这里可以改成多选
    group->setExclusive(false);


    // 链接创建好的槽函数
    QObject::connect(group,SIGNAL(buttonClicked(QAbstractButton*)),this,SLOT(Click(QAbstractButton*)));
    QObject::connect(group,SIGNAL(buttonToggled(QAbstractButton*,bool)),this,SLOT(Toggl(QAbstractButton*,bool)));

}

void Widget::Click(QAbstractButton * but)
{
    // 打印按钮组中被点击的选择框
    qDebug() << "按钮组被点击:" << but << but->isChecked();
}

void Widget::Toggl(QAbstractButton * but, bool check)
{
    // 打印按钮组中被触发的选择框
    qDebug() << "按钮组被触发:" << but << check;
}

Widget::~Widget()
{
    delete ui;
}

3、在选择框是多选的情况下的演示效果:

可以看到,在选中或者取消选中任意一个选择框的时候,都能触发一次 按钮组的 buttonClicked 和 buttonToggled 信号

 

4、// group->setExclusive(false); 把这行注释掉,在选择框是单选的情况下的演示效果:

       可以看到,

选中一个选择框的时候,可以触发按钮组的 buttonClicked 和 buttonToggled 信号

再去选中另一个选择框的时候,第一个选择框的 buttonToggled 的信号又被触发了一次

点击已经选中的选择框的时候,可以单独触发 buttonToggled 信号

 关于 QButtonGroup  的一些信号:
buttonClicked(QAbstractButton *button)
buttonClicked(int id)
buttonPressed(QAbstractButton *button)
buttonPressed(int id)
buttonReleased(QAbstractButton *button)
buttonReleased(int id)
buttonToggled(QAbstractButton *button, bool checked)
buttonToggled(int id, bool checked)
 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐