Qt之QButtonGroup简单使用

来源:互联网 发布:网络创新项目 编辑:程序博客网 时间:2024/06/06 05:55

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

#include <QWidget>#include <QButtonGroup>#include <QDebug>namespace Ui {class SwitchButtonWidget;}class SwitchButtonWidget : public QWidget{    Q_OBJECTpublic:    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…

0 0
原创粉丝点击