Qt中QButtonGroup使用

QButtonGroup只是对逻辑控制,不对显示控制,默认单项,可选多项,效果如下:
在这里插入图片描述
代码如下:

#ifndef TESTWGT_H
#define TESTWGT_H

#include <QWidget>
#include <QButtonGroup>

class TestWgt : public QWidget
{
    Q_OBJECT

public:
    explicit TestWgt(QWidget *parent = 0);
    ~TestWgt();

private:
    void initObject();
    void initConnect();

private slots:
    void slot_BtnGroupChanged(int);
    void slot_RtnGroupChanged(int);
    void slot_ChxGroupChanged(int);

private:

    QButtonGroup *m_pBtnGroup;
    QButtonGroup *m_pRtnGroup;
    QButtonGroup *m_pChxGroup;
};

#endif // TESTWGT_H

#include "testwgt.h"
#include "ui_testwgt.h"
#include <QDebug>
#include <QCheckBox>
#include <QPushButton>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QHBoxLayout>

TestWgt::TestWgt(QWidget *parent) :
    QWidget(parent)
{
    initObject();
    initConnect();
}

TestWgt::~TestWgt()
{
}

void TestWgt::initObject()
{
    this->setWindowTitle(tr("QButtonGroup"));
    this->setFixedSize(500,300);

    QPushButton *pTestBtn1 = new QPushButton;
    QPushButton *pTestBtn2 = new QPushButton;
    QPushButton *pTestBtn3 = new QPushButton;
    m_pBtnGroup = new QButtonGroup(this);
    m_pBtnGroup->addButton(pTestBtn1,0);
    m_pBtnGroup->addButton(pTestBtn2,1);
    m_pBtnGroup->addButton(pTestBtn3,2);

    QHBoxLayout* pHVlayout1 = new QHBoxLayout();
    pHVlayout1->setMargin(0);
    pHVlayout1->setSpacing(0);
    pHVlayout1->addStretch();
    pHVlayout1->addWidget(pTestBtn1);
    pHVlayout1->addStretch();
    pHVlayout1->addWidget(pTestBtn2);
    pHVlayout1->addStretch();
    pHVlayout1->addWidget(pTestBtn3);
    pHVlayout1->addStretch();

    QCheckBox *pTestChx1 = new QCheckBox;
    QCheckBox *pTestChx2 = new QCheckBox;
    QCheckBox *pTestChx3 = new QCheckBox;
    m_pChxGroup= new QButtonGroup(this);
    m_pChxGroup->addButton(pTestChx1,0);
    m_pChxGroup->addButton(pTestChx2,1);
    m_pChxGroup->addButton(pTestChx3,2);
    // 设置不互斥
    pChxGroup->setExclusive(false);//这样的话就支持多选了

    QHBoxLayout* pHVlayout2 = new QHBoxLayout();
    pHVlayout2->setMargin(0);
    pHVlayout2->setSpacing(0);
    pHVlayout2->addStretch();
    pHVlayout2->addWidget(pTestChx1);
    pHVlayout2->addStretch();
    pHVlayout2->addWidget(pTestChx2);
    pHVlayout2->addStretch();
    pHVlayout2->addWidget(pTestChx3);
    pHVlayout2->addStretch();

    QRadioButton *pTestRtn1 = new QRadioButton;
    QRadioButton *pTestRtn2 = new QRadioButton;
    QRadioButton *pTestRtn3 = new QRadioButton;
    m_pRtnGroup= new QButtonGroup(this);
    m_pRtnGroup->addButton(pTestRtn1,0);
    m_pRtnGroup->addButton(pTestRtn2,1);
    m_pRtnGroup->addButton(pTestRtn3,2);
    // 设置不互斥
    pRtnGroup->setExclusive(false);//这样的话就支持多选了

    QHBoxLayout* pHVlayout3 = new QHBoxLayout();
    pHVlayout3->setMargin(0);
    pHVlayout3->setSpacing(0);
    pHVlayout3->addStretch();
    pHVlayout3->addWidget(pTestRtn1);
    pHVlayout3->addStretch();
    pHVlayout3->addWidget(pTestRtn2);
    pHVlayout3->addStretch();
    pHVlayout3->addWidget(pTestRtn3);
    pHVlayout3->addStretch();

    QVBoxLayout* pMainVlayout = new QVBoxLayout(this);
    pMainVlayout->setMargin(0);
    pMainVlayout->setSpacing(0);
    pMainVlayout->addStretch();
    pMainVlayout->addLayout(pHVlayout1);
    pMainVlayout->addStretch();
    pMainVlayout->addLayout(pHVlayout2);
    pMainVlayout->addStretch();
    pMainVlayout->addLayout(pHVlayout3);
    pMainVlayout->addStretch();
}

void TestWgt::initConnect()
{
    connect(m_pBtnGroup,SIGNAL(buttonClicked(int)),this,SLOT(slot_BtnGroupChanged(int)));
    connect(m_pRtnGroup,SIGNAL(buttonClicked(int)),this,SLOT(slot_RtnGroupChanged(int)));
    connect(m_pChxGroup,SIGNAL(buttonClicked(int)),this,SLOT(slot_ChxGroupChanged(int)));
}

void TestWgt::slot_BtnGroupChanged(int id)
{
    qDebug() << "slot_BtnGroupChanged=>" << id << endl;
}

void TestWgt::slot_RtnGroupChanged(int id)
{
    qDebug() << "slot_RtnGroupChanged=>" << id << endl;
}

void TestWgt::slot_ChxGroupChanged(int id)
{
    qDebug() << "slot_ChxGroupChanged=>" << id << endl;
}
#include <QApplication>
#include "testwgt.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    TestWgt w;
    w.show();

    return a.exec();
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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()`方法将被调用,并显示选的按钮文本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星火撩猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值