qt c++ 单选按钮组应用举例

以下是一个使用Qt C++实现单选按钮组(QRadioButton + QButtonGroup)的完整示例,包含界面布局和信号槽处理:

#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QRadioButton>
#include <QButtonGroup>
#include <QLabel>
#include <QDebug>

class RadioDemo : public QWidget {
    Q_OBJECT

public:
    RadioDemo(QWidget *parent = nullptr) : QWidget(parent) {
        // 创建界面组件
        QVBoxLayout *mainLayout = new QVBoxLayout(this);
        QHBoxLayout *btnLayout = new QHBoxLayout();
        QLabel *statusLabel = new QLabel("当前选择:无");

        // 创建单选按钮
        QRadioButton *btnOption1 = new QRadioButton("选项一");
        QRadioButton *btnOption2 = new QRadioButton("选项二");
        QRadioButton *btnOption3 = new QRadioButton("选项三");

        // 设置默认选中
        btnOption1->setChecked(true);

        // 创建按钮组并添加按钮
        QButtonGroup *btnGroup = new QButtonGroup(this);
        btnGroup->addButton(btnOption1, 1);  // 第二个参数为自定义ID
        btnGroup->addButton(btnOption2, 2);
        btnGroup->addButton(btnOption3, 3);

        // 布局管理
        btnLayout->addWidget(btnOption1);
        btnLayout->addWidget(btnOption2);
        btnLayout->addWidget(btnOption3);
        mainLayout->addLayout(btnLayout);
        mainLayout->addWidget(statusLabel);

        // 信号槽连接(三种方式任选)
        // 方式1:通过按钮组信号
        connect(btnGroup, QOverload<int>::of(&QButtonGroup::idClicked),
                [=](int id){
                    statusLabel->setText("当前选择:选项" + QString::number(id));
                    qDebug() << "Selected ID:" << id;
                });

        // 方式2:通过单个按钮信号
        connect(btnOption1, &QRadioButton::toggled,
                [=](bool checked){
                    if(checked) statusLabel->setText("当前选择:选项一");
                });

        // 方式3:通过按钮组获取选中状态
        connect(btnGroup, &QButtonGroup::buttonToggled,
                [=](QAbstractButton *button, bool checked){
                    if(checked) {
                        statusLabel->setText("当前选择:" + button->text());
                    }
                });

        setWindowTitle("单选按钮组演示");
        resize(300, 150);
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    RadioDemo window;
    window.show();
    
    return app.exec();
}

#include "main.moc"  // 必要包含以支持Qt的元对象系统

关键点解析:

  1. 按钮组创建
    • 使用QButtonGroup管理单选按钮,自动实现互斥选择
    • 通过addButton(button, id)添加按钮时可以指定自定义ID
  2. 布局管理
    • 使用QVBoxLayoutQHBoxLayout组合实现垂直+水平布局
    • 按钮默认水平排列,可通过修改布局方向调整
  3. 信号槽连接(三种方式):
    • 方式1:通过按钮组的idClicked信号获取自定义ID
    • 方式2:直接连接单个按钮的toggled信号
    • 方式3:通过buttonToggled信号获取选中按钮对象
  4. 状态反馈
    • 使用QLabel实时显示当前选中状态
    • 控制台输出调试信息(qDebug()
  5. 扩展功能
    • 设置默认选中:btnOption1->setChecked(true)
    • 获取选中按钮:

      QAbstractButton *selectedBtn = btnGroup->checkedButton();
      int selectedId = btnGroup->checkedId();

运行效果:

  1. 窗口显示三个水平排列的单选按钮
  2. 默认选中"选项一"
  3. 选择不同选项时:
    • 标签文字实时更新
    • 控制台输出选中ID
    • 按钮组自动处理互斥逻辑

典型应用场景:

  • 配置选项选择(如:分辨率设置、主题选择)
  • 表单填写中的单选问题
  • 游戏难度选择
  • 任何需要从多个互斥选项中选择一个的场景

可以根据实际需求:

  1. 修改按钮文本内容
  2. 调整布局方式(垂直排列、网格排列等)
  3. 添加样式表美化界面
  4. 扩展选择后的业务逻辑处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值