QButtonGroup的简单应用

本文介绍了Qt中QButtonGroup的使用方法,包括如何创建按钮组、设置按钮组的属性及响应点击事件等。通过示例代码展示了如何管理QPushButton和QRadioButton,并实现了单选和多选的功能。
部署运行你感兴趣的模型镜像

所有代码都是在qt3.3.8+fedora8下运行的。

QButtonGroup用于统一管理一组QButton按钮。理论上所有继承自QButton的按钮类都可以使用。这里以QPushButton和QRadioButton为例演示。
按钮分组的作用主要用在项目选择上,可以单选,也可以多选,根据属性设置而定。

头文件: <qbuttongroup.h>

主要属性和函数:
int id:
按钮的标签,可以用这个标签来获得或操作组里的各个按钮。

bool exclusive:
This property holds whether the button group is exclusive.
If this property is TRUE, then the buttons in the group are toggled, and to untoggle a button you must click on another button in the group. The default value is FALSE.
Set this property's value with setExclusive() and get this property's value with isExclusive().
独占属性
它标示了这个按钮组是否只能有一个按钮处于激活状态。
如果这个属性是TRUE,那么组里所有按钮都被toggled(不太会翻译这个词),要想取消一个按钮,必须点击另一个按钮。默认是FALSE。
设置该属性用setExclusive()函数;获得用isExclusive()。

insert(QButton *button, int id=-1)
向按钮组里添加一个按钮。

setButton(id)
使id所代表的按钮被选中

完整测试代码:
#ifndef GROUPBUTTONPAGE_H
#define GROUPBUTTONPAGE_H

#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qlabel.h>
#include <qbuttongroup.h>
#include <qwidget.h>
#include <qlayout.h>

class GroupButtonPage : public QWidget
{
    Q_OBJECT
public:
    GroupButtonPage(QWidget *parent=0, const char *name=0, WFlags f = 0) : QWidget(parent, name, f)
    {
QVBoxLayout *vBox = new QVBoxLayout(this);
vBox->setSpacing(10);
setRadioButtonGroup(vBox);
setPushButtonGroup(vBox);
    };
   
private slots:
    void resetRadioButtonGroup(int id);
    void resetPushButtonGroup(int id);

private:
    QButtonGroup *m_radioButtonGroup;
    QButtonGroup *m_pushButtonGroup;
   
    void setRadioButtonGroup(QLayout *l);
    void setPushButtonGroup(QLayout *l);
};

inline void GroupButtonPage::setRadioButtonGroup(QLayout *l){
    m_radioButtonGroup = new QButtonGroup(this);
    connect(m_radioButtonGroup, SIGNAL(clicked(int)), this, SLOT(resetRadioButtonGroup(int)));
    //m_radioButtonGroup->setExclusive(true);//按钮间互斥选中,也就是说同时只能有一个被选中状态
    m_radioButtonGroup->hide();//将buttonGroup隐藏起来(只显示按钮就行了)
    //QButtonGroup是没有布局管理的,需要借助layout类实现
    QHBoxLayout *hBox = new QHBoxLayout(l);
    hBox->setSpacing(5);
    //
    hBox->addWidget(new QLabel("radiobutton按钮组:", this));
    hBox->addWidget(m_radioButtonGroup);
    //向buttonGroup里放三个radioButton
    QRadioButton *btn1 = new QRadioButton("按钮一", this, "radiobutton1");
    hBox->addWidget(btn1);
    m_radioButtonGroup->insert(btn1);
    QRadioButton *btn2 = new QRadioButton("按钮二", this, "radiobutton2");
    hBox->addWidget(btn2);
    m_radioButtonGroup->insert(btn2);
    QRadioButton *btn3 = new QRadioButton("按钮三", this, "radiobutton3");
    //btn3->setToggleButton(true);//QRadioButton::setToggleButton()是受保护的,因为默认就是true的。
    hBox->addWidget(btn3);
    m_radioButtonGroup->insert(btn3);
    //设置第一个按钮被选中
    m_radioButtonGroup->setButton(0);
}

inline void GroupButtonPage::setPushButtonGroup(QLayout *l){
    m_pushButtonGroup = new QButtonGroup(this);
    connect(m_pushButtonGroup, SIGNAL(clicked(int)), this, SLOT(resetPushButtonGroup(int)));
    m_pushButtonGroup->setExclusive(true);//按钮间互斥选中,也就是说同时只能有一个被选中状态
    m_pushButtonGroup->hide();//将buttonGroup隐藏起来(只显示按钮就行了)
    //QButtonGroup是没有布局管理的,需要借助layout类实现
    QHBoxLayout *hBox = new QHBoxLayout(l);
    hBox->setSpacing(5);
    //
    hBox->addWidget(new QLabel("pushbutton按钮组:", this));
    hBox->addWidget(m_pushButtonGroup);
    //向buttonGroup里放三个pushButton
    QPushButton *btn1 = new QPushButton("按钮一", this, "pushbutton1");
    btn1->setToggleButton(true);
    hBox->addWidget(btn1);
    m_pushButtonGroup->insert(btn1);
    QPushButton *btn2 = new QPushButton("按钮二", this, "pushbutton2");
    btn2->setToggleButton(true);
    hBox->addWidget(btn2);
    m_pushButtonGroup->insert(btn2);
    QPushButton *btn3 = new QPushButton("按钮三", this, "pushbutton3");
    btn3->setToggleButton(true);
    hBox->addWidget(btn3);
    m_pushButtonGroup->insert(btn3);
    //设置第一个按钮被选中
    m_pushButtonGroup->setButton(0);
}

inline void GroupButtonPage::resetRadioButtonGroup(int id){
    m_radioButtonGroup->setButton(id);
    qDebug("GroupButtonPage::resetRadioButtonGroup: id=%d", id);
    qDebug("GroupButtonPage::resetRadioButtonGroup: name=%s", m_radioButtonGroup->selected()->name());
}

inline void GroupButtonPage::resetPushButtonGroup(int id){
    m_pushButtonGroup->setButton(id);
    qDebug("GroupButtonPage::resetPushButtonGroup: id=%d", id);
    qDebug("GroupButtonPage::resetPushButtonGroup: name=%s", m_pushButtonGroup->selected()->name());
}

#endif //GROUPBUTTONPAGE_H

显示效果如下:

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值