QButtonGroup的简单应用

QButtonGroup的简单应用

所有代码都是在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值