QButtonGroup 类
QButtonGroup类提供了一个容器来组织按钮小部件组。
Header | #include < QButtonGroup > |
---|---|
qmake | QT += widgets |
Inherits | QObject |
Inherited By |
详细说明
QButtonGroup提供了一个抽象容器,可以将按钮小部件放入其中。它不提供这个容器的可视化表示(请参见QGroupBox中的容器小部件),而是管理该组中每个按钮的状态。
独占按钮组关闭除已单击的按钮外的所有可检查(切换)按钮。默认情况下,按钮组是独占的。按钮组中的按钮通常是可检查的QPushButtons、QCheckBox(通常用于非独占按钮组)或QRadioButtons。如果创建独占按钮组,则应确保组中的某个按钮最初处于选中状态;否则,组最初将处于未选中任何按钮的状态。
可以使用addButton() 将按钮添加到组中,并使用removeButton() 删除按钮。如果组是独占的,则当前选中的按钮可与checkedButton() 一起使用。如果单击按钮,则会发出buttonClicked() 信号;对于独占组中的可检查按钮,这意味着该按钮已被检查。组中的按钮列表由buttons() 返回。
此外,QButtonGroup可以在整数和按钮之间进行映射。可以使用setId() 为按钮分配整数id,并使用id() 检索它。当前选中按钮的id在checkedId() 中可用,并且有一个重载信号buttonClicked() ,它会发出按钮的id。ID -1由QButtonGroup保留,意思是“没有这样的按钮”。映射机制的目的是简化用户界面中枚举值的表示。
属性
-
exclusive: bool 按钮组是否为独占的
如果此属性为true,则在任何给定时间只能检查组中的一个按钮。用户可以单击任何按钮来选中它,并且该按钮将替换现有的按钮作为组中的选中按钮。
在独占组中,用户不能通过单击当前选中的按钮来取消选中该按钮;相反,必须单击该组中的另一个按钮才能为该组设置新的选中按钮。
默认情况下,此属性为true。
- bool exclusive() const
- void setExclusive(bool)
公共函数
构造和析构
- QButtonGroup(QObject *parent = nullptr)
- virtual ~QButtonGroup()
属性相关
- bool exclusive() const
- void setExclusive(bool)
添加、删除、查找
- void addButton(QAbstractButton *button, int id = -1)
- void removeButton(QAbstractButton *button)
- QList<QAbstractButton *> buttons() const
- QAbstractButton * checkedButton() const
整数和按钮的映射
- int id(QAbstractButton *button) const
- void setId(QAbstractButton *button, int id)
- QAbstractButton * button(int id) const
- int checkedId() const
信号
- void buttonClicked(QAbstractButton *button)
- void buttonPressed(QAbstractButton *button)
- void buttonReleased(QAbstractButton *button)
- void buttonToggled(QAbstractButton *button, bool checked)
- void idClicked(int id)
- void idPressed(int id)
- void idReleased(int id)
- void idToggled(int id, bool checked)
演示代码
int main(int argc, char *argv[])
{
QApplication::setStyle (QStyleFactory::create ("fusion")); //windowsvista macintosh fusion
QApplication app(argc,argv);
app.setApplicationName ("QButtonGroup");
app.setStyleSheet (
"QPushButton:checked"
"{"
"background-color: yellow;"
"}");
QDialog w;
w.setWindowFlag (Qt::WindowContextHelpButtonHint,false);
auto *mainLayout = new QGridLayout(&w);
QButtonGroup *bGroup = new QButtonGroup(&w);
bGroup->setExclusive (false);
qDebug() << bGroup->parent ();
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 5; ++j) {
QPushButton *btn = new QPushButton(QString("%1,%2").arg (i).arg (j));
btn->setCheckable (true);
bGroup->addButton (btn,i*5+j);
qDebug() << "btn" << btn->parent ();
mainLayout->addWidget (btn,i,j);
qDebug() << "btn" << btn->parent ();
}
}
QObject::connect (bGroup,&QButtonGroup::idClicked,[=](int id){
qDebug() << id << bGroup->button (id)->text ();
});
w.show ();
app.exec();
return 0;
}