[Qt基础-06] QButtonGroup

QButtonGroup

本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QButtonGroup的功能以及基本使用

简介

有的时候,我们会创建很多按钮,例如创建3个QPushButton,但是这三个按钮对应的功能比较相似,正常的情况下,我们会绑定三个信号和槽,但是这样就有很多多余的代码,在这种情况下,我们可以使用QButtonGroup来,将按钮加到容器里,统一进行管理。

根据QT帮助文档中的描述,QButtonGroup是一个容纳QAbstractButton的一个容器,这个容器不像QGroupBox一样提供可视化的显示,其主要功能是对按钮的管理。

QButtonGroup默认是互斥的,也就是说,添加到这个容器里面的按钮,默认情况下,只能有一个按钮是checked的;既然是容器,那就有添加和删除,即addButtonremoveButton。同样的,也有获取里面的元素即buttons

关联信号buttonClickedbuttonPressedbuttonToggled,来执行不同按钮按下时,对应的不同操作。

  1. 添加和删除按钮

    添加按钮,使用函数addButton,这个函数的原型是:

    void QButtonGroup::addButton(QAbstractButton *button, int id = -1);
    

    button 这个参数的代表你要添加的按钮,而后面的 id则是你要添加的按钮的序号,如果id等于-1,根据容器里按钮的id来自动的给按钮添加一个id。自动添加的id,默认会从-2开始。

    QButtonGroup m_group;
    
    m_group_2.addButton(ui->radioButton);
    m_group_2.addButton(ui->radioButton_2);
    m_group_2.addButton(ui->radioButton_3);
    
    // 此时按钮的id分别是-2、-3、-4
    
    QButtonGroup m_group;
    
    m_group_2.addButton(ui->radioButton, 0);
    m_group_2.addButton(ui->radioButton_2, 1);
    m_group_2.addButton(ui->radioButton_3, 2);
    
    // 此时按钮的id分别是0、1、2
    
    QButtonGroup m_group;
    
    m_group_2.addButton(ui->radioButton, 2);
    m_group_2.addButton(ui->radioButton_2);
    m_group_2.addButton(ui->radioButton_3);
    
    // 此时按钮的id分别是2、1、0
    
    QButtonGroup m_group;
    
    m_group_2.addButton(ui->radioButton_2);
    m_group_2.addButton(ui->radioButton_3);
    m_group_2.addButton(ui->radioButton, 2);
    
    // 此时按钮的id分别是-2、-3、2
    
    

    由上面可以得知:

    如果添加按钮时,设置自动id,如果容器内有按钮,那么新添加的按钮的id为: 容器中已存在的按钮的最小id - 1,如果容器内没有按钮,则默认从-2开始。

    删除按钮,使用函数removeButton,函数的原型是:

        void QButtonGroup::removeButton(QAbstractButton *button)
    

    button 是你要删除的那个按钮。

  2. 按钮的id

    获取按钮的id,调用id函数,来获取。如果需要重新给按钮设置一个id,调用setId,来给按钮设置一个新的id。两个函数的原型分别为:

        int QButtonGroup::id(QAbstractButton *button) const
        void QButtonGroup::setId(QAbstractButton *button, int id)
    
  3. 获取当前按下的按钮

    调用checkButton来获取按钮组容器中,选中的按钮,如果没有按钮选中,则返回nullptr。调用checkedId同时也可以获取当前选中的按钮的id。

    int QButtonGroup::checkedId() const
    QAbstractButton *QButtonGroup::checkedButton() const
    
  4. 设置QButtonGroup互斥

    QButtonGroup默认是互斥的,也就是说,一个按钮组中,在同一时间下,只能有一个按钮被选中。但是,你也可以关闭掉互斥的属性。

    调用setExclusive来设置互斥的属性

信号和槽

信号的连接主要是对里面按钮按下时所发射的信号,主要是两类,一类是返回按下的按钮(QAbstractButton*),另一类是返回按下按钮的id

  1. 返回按下的按钮

    主要是有几个信号:

    void QButtonGroup::buttonClicked(QAbstractButton *button);
    void QButtonGroup::buttonPressed(QAbstractButton *button);
    void QButtonGroup::buttonRelease(QAbstractButton *button)
    void QButtonGroup::buttonToggled(QAbstractButton *button, bool checked);
    

    由于这些信号都是重载的,所以如果想用函数指针来连接,你像下面这样连接:

    connect(buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
     [=](QAbstractButton *button){ /* ... */ });
    
  2. 返回按下按钮的id

    和上面类似,主要也是几个信号:

    void QButtonGroup::idClicked(int id);
    void QButtonGroup::idPressed(int id);
    void QButtonGroup::idRelease(int id)
    void QButtonGroup::idToggled(int id, bool checked);
    
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值