Qt之QButtonGroup简单使用

在项目中遇到一个需求,根据外部条件来确定你的界面上显示多少个按钮。于是,写一个小程序测试了下,效果还可以。
主要用到QButtonGroup类,需要包含头文件,接着申请一个按钮数组对象QButtonGroup *buttonGroup,所有的按钮在ui中定义好了。
下面贴代码:
.h文件:

#include <QWidget>
#include <QButtonGroup>
#include <QDebug>

namespace Ui {
class SwitchButtonWidget;
}

class SwitchButtonWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SwitchButtonWidget(int number,QWidget *parent = 0);
    //number即为已知的外部条件
    ~SwitchButtonWidget();

private:
    Ui::SwitchButtonWidget *ui;
    QButtonGroup *buttonGroup;
    int m_number;
    void initButton();
public slots:
    void buttonJudge(int buttonId);
};

.cpp文件:

SwitchButtonWidget::SwitchButtonWidget(int number, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SwitchButtonWidget)
{
    ui->setupUi(this);
    m_number = number;
    setStyleSheet("background-color:white;"
                  "QPushButton{"
                  "background-color:white;"
                  "color:black;"
                  "text-align:center;"
                  "border-radius: 8px;"
                  "border: 2px groove gray;"
                  "border-style: outset;"
                  "}");
    buttonGroup = new QButtonGroup;
    //第二个参数id可以自行定义
    buttonGroup->addButton(ui->pushButton_1,1);
    buttonGroup->addButton(ui->pushButton_2,2);
    buttonGroup->addButton(ui->pushButton_3,3);
    buttonGroup->addButton(ui->pushButton_4,4);
    buttonGroup->addButton(ui->pushButton_5,5);
    buttonGroup->addButton(ui->pushButton_6,6);
    buttonGroup->addButton(ui->pushButton_7,7);
    buttonGroup->addButton(ui->pushButton_8,8);
    buttonGroup->addButton(ui->pushButton_9,9);
    initButton();
    connect(buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(buttonJudge(int)));

}

SwitchButtonWidget::~SwitchButtonWidget()
{
    delete ui;
}

void SwitchButtonWidget::initButton()
{
    QPushButton *button;
    bool isFlag = false;
    QString bname;
    if(m_number > 9)
        return;
    qDebug() << "m_number" << m_number;
    for(int i = 1; i <= m_number;i++)//pushButton_1
    {
        bname = "pushButton_" + QString::number(i);
        button = this->findChild<QPushButton *>("pushButton_" + QString::number(i));
        //注意这样是this调用findChild方法,一开始使用这个是我是buttonGroup直接去调用的,这个得到的是空的无效的按钮
        isFlag = true;
        if(isFlag)
        {
            button->show();
            isFlag = false;
        }
    }
    for(int i = m_number + 1; i <= 9;i++)
    {
        button =  this->findChild<QPushButton *>("pushButton_" + QString::number(i));
        isFlag = false;
        if(!isFlag)
        {
            button->hide();
            isFlag = false;
        }
    }
}

void SwitchButtonWidget::buttonJudge(int buttonId)
{
    qDebug() << "the Key:" << buttonId;
}

主要用到findChild()方法,通过按钮的名字去查找相应的按钮,返回找到的按钮,还有一个findChildern()方法返回的是按钮的QList<>数组。
最初的想法是根据id值来索引相应的按钮,发现没有对应的接口,如果可以这样就方便多了。
/************************************分割线*************************************/
它的成员函数buttons()的使用:

//btnGroup为按钮组对象
QList<QAbstractButton*> buttonsList = btnGroup->buttons();
    if(buttonsList.isEmpty()){
        qDebug() << "isEmpty";
        return;
    }
    foreach (QAbstractButton *button, buttonsList)
    {
        ((QPushButton*)button)->setEnabled(false);
        //设置按钮不可点击
    }

在上面的例子中,通过buttons()函数获取btnGroup的每一个按钮对象,然后设置为不可点击。QAbstractButton 类是 QPushButton,QCheckBox,QRadioButton 等类的基类,它可以代表按钮、单选纽、复选纽等重要窗口部件。所以强转成QPushButton类。end…

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值