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