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…

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
QButtonGroupQT中一个方便的类,用于管理一组互斥的按钮(例如,单选按钮)。通过将多个按钮添加到QButtonGroup中,您可以实现只有一个按钮可以被选中的效果。当一个按钮被选中时,其他按钮将自动取消选择。 QButtonGroup提供了多个便利的方法,例如`addButton()`用于添加按钮,`checkedButton()`用于获取当前选中的按钮,`buttonClicked()`用于处理按钮点击事件等。 以下是一个简单的示例,演示如何使用QButtonGroup: ```python from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout, QButtonGroup import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() # 创建一个QButtonGroup self.group = QButtonGroup() # 创建多个QRadioButton,并将它们添加到QButtonGroup中 rb1 = QRadioButton('Option 1') rb2 = QRadioButton('Option 2') rb3 = QRadioButton('Option 3') self.group.addButton(rb1) self.group.addButton(rb2) self.group.addButton(rb3) # 将QRadioButton添加到垂直布局中 vbox.addWidget(rb1) vbox.addWidget(rb2) vbox.addWidget(rb3) # 为QButtonGroup绑定按钮点击事件 self.group.buttonClicked.connect(self.on_button_clicked) self.setLayout(vbox) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('QButtonGroup Example') self.show() def on_button_clicked(self, button): # 处理按钮点击事件 print('Button %s clicked' % button.text()) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 运行程序后,您可以看到三个单选按钮。当您单击其中一个时,`on_button_clicked()`方法将被调用,并显示选中的按钮文本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值