QButtonGroup的使用

        当有一组按钮时,可以共用一个槽函数,在该槽函数中做判断逻辑处理,那么此时就需要用到QButtonGroup类了,例如有如下界面

         可以把这四个按钮全部放到按钮组里,根据按钮的序号分别进行调用。

1 QButtonGroup类常用方法简介

(1)addButton,声明如下

void QButtonGroup::addButton(QAbstractButton *button, int id = -1)

   Qt助手的解释:

          Adds the given button to the button group. If id is -1, an id will be assigned to the button. Automatically assigned ids are guaranteed to be negative, starting with -2. If you are assigning your own ids, use positive values to avoid conflicts.

          See also removeButton() and buttons().

翻译如下:

         将给定的按钮添加到按钮组。如果id为-1,则将为按钮分配一个id。自动分配的id保证是负数,从-2开始。如果您要分配自己的id,请使用正值来避免冲突。

(2)setExclusive 设置互斥

(3)按钮点击信号 buttonClicked 

2 如何使用QButtonGroup

      包含头文件      #include <QButtonGroup>

      我用QtCreator创建的项目

      主界面头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QButtonGroup>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void onBtnFunc(int n);

private:
    Ui::MainWindow *ui;

    //声明按钮组对象
    QButtonGroup *m_buttonGroup;
};
#endif // MAINWINDOW_H

      cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_buttonGroup = new QButtonGroup();

    //将4个按钮绑定到按钮组,并设置序号
    m_buttonGroup->addButton (ui->btn1, 0);
    m_buttonGroup->addButton (ui->btn2, 1);
    m_buttonGroup->addButton (ui->btn3, 2);
    m_buttonGroup->addButton (ui->btn4, 3);
    m_buttonGroup->setExclusive(true);

    //按钮组信号槽
    connect (m_buttonGroup, SIGNAL (buttonClicked(int)), this, SLOT(onBtnFunc(int)));
}

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

void MainWindow::onBtnFunc(int n)
{
    quint16 a = m_buttonGroup->checkedId();
    ui->lineEdit->setText("btn" + QString::number(n) + " clicked");
}


       checkdId获取的好像是错误值,不知道什么鬼,不过也用不用,用信号传过来的值,或者用sender()也可以判断是哪个被点击了。

       编译即可运行

       QButtonGroup和sender()有点类似,二者可以配合使用。

       Qt sender()的使用可以看这篇文章:https://blog.csdn.net/yao_hou/article/details/104573507

3 项目源码链接

       https://github.com/linghuzhangmen/QButtonGroup_Test

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
QButtonGroup 是 PyQt5 中的一个小部件,它可以将多个按钮组合在一起,使它们成为一个可单选或可多选的组。下面是一个简单的示例,展示了如何使用 QButtonGroup。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QButtonGroup, QVBoxLayout class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() # 创建单选按钮,添加到布局中 rb1 = QRadioButton('Button 1') vbox.addWidget(rb1) rb2 = QRadioButton('Button 2') vbox.addWidget(rb2) rb3 = QRadioButton('Button 3') vbox.addWidget(rb3) # 创建按钮组 self.groupbox = QButtonGroup() self.groupbox.addButton(rb1) self.groupbox.addButton(rb2) self.groupbox.addButton(rb3) self.setLayout(vbox) # 信号连接到槽 self.groupbox.buttonClicked[int].connect(self.on_radio_button_clicked) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('QButtonGroup Example') self.show() def on_radio_button_clicked(self, id): # 获取选中的按钮 button = self.groupbox.checkedButton() print('Button %s is selected.' % (button.text())) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在上面的代码中,我们创建了三个单选按钮,然后将它们添加到一个垂直布局中。我们还创建了一个 QButtonGroup,将这三个按钮添加到该组中。最后,我们将 signal 连接到槽,当单选按钮被点击时,会调用 on_radio_button_clicked 方法。这个方法获取当前选中的按钮,然后打印它的文本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐掌门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值