管理器Widgets(02):【类】QButtonGroup [官翻]

QButtonGroup 类

QButtonGroup类提供了一个容器来组织按钮小部件组。

Header#include < QButtonGroup >
qmakeQT += widgets
InheritsQObject
Inherited By

详细说明

QButtonGroup提供了一个抽象容器,可以将按钮小部件放入其中。它提供这个容器的可视化表示(请参见QGroupBox中的容器小部件),而是管理该组中每个按钮的状态。

独占按钮组关闭除已单击的按钮外的所有可检查(切换)按钮。默认情况下,按钮组是独占的。按钮组中的按钮通常是可检查的QPushButtons、QCheckBox(通常用于非独占按钮组)或QRadioButtons。如果创建独占按钮组,则应确保组中的某个按钮最初处于选中状态;否则,组最初将处于未选中任何按钮的状态。

可以使用addButton() 将按钮添加到组中,并使用removeButton() 删除按钮。如果组是独占的,则当前选中的按钮可与checkedButton() 一起使用。如果单击按钮,则会发出buttonClicked() 信号;对于独占组中的可检查按钮,这意味着该按钮已被检查。组中的按钮列表由buttons() 返回。

此外,QButtonGroup可以在整数和按钮之间进行映射。可以使用setId() 为按钮分配整数id,并使用id() 检索它。当前选中按钮的id在checkedId() 中可用,并且有一个重载信号buttonClicked() ,它会发出按钮的id。ID -1由QButtonGroup保留,意思是“没有这样的按钮”。映射机制的目的是简化用户界面中枚举值的表示。

属性

  1. exclusive: bool 按钮组是否为独占的

    如果此属性为true,则在任何给定时间只能检查组中的一个按钮。用户可以单击任何按钮来选中它,并且该按钮将替换现有的按钮作为组中的选中按钮。

    在独占组中,用户不能通过单击当前选中的按钮来取消选中该按钮;相反,必须单击该组中的另一个按钮才能为该组设置新的选中按钮。

    默认情况下,此属性为true。

    1. bool exclusive() const
    2. void setExclusive(bool)

公共函数

构造和析构

  1. QButtonGroup(QObject *parent = nullptr)
  2. virtual ~QButtonGroup()

属性相关

  1. bool exclusive() const
  2. void setExclusive(bool)

添加、删除、查找

  1. void addButton(QAbstractButton *button, int id = -1)
  2. void removeButton(QAbstractButton *button)
  3. QList<QAbstractButton *> buttons() const
  4. QAbstractButton * checkedButton() const

整数和按钮的映射

  1. int id(QAbstractButton *button) const
  2. void setId(QAbstractButton *button, int id)
  3. QAbstractButton * button(int id) const
  4. int checkedId() const

信号

  1. void buttonClicked(QAbstractButton *button)
  2. void buttonPressed(QAbstractButton *button)
  3. void buttonReleased(QAbstractButton *button)
  4. void buttonToggled(QAbstractButton *button, bool checked)
  5. void idClicked(int id)
  6. void idPressed(int id)
  7. void idReleased(int id)
  8. 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值