《QT 108好类》之13 QRadioButton类

QT 108好类之13 QRadioButton类

QRadioButton类是一个单选按钮,配合 QButtonGroup管理分组,确保组内单选互斥。有时会配合QGroupBox组织和结构化用户界面​​,使其更清晰、易用。

QRadioButton类继承关系

QRadioButton类继承关系

QRadioButton类核心特性与应用场景​​

核心特性

​​互斥性​​:通过 QButtonGroup管理分组,确保组内单选互斥
​​状态信号​​:toggled(bool)/ clicked()信号响应状态变化
​​快捷键支持​​:通过 &设置快捷键(如 “&Save"按 Alt+S 触发)
​​禁用/启用​​:setEnabled(false)禁用按钮
​​样式定制​​:支持 QSS 样式表定制外观
动态文本​​:支持HTML富文本(setText(”重要选项") )

典型场景包括:

​​设置选项​​(如语言、主题、单位制式)
​​表单填写​​(如性别选择、支付方式)
​​模式切换​​(如“编辑模式”/“预览模式”)
​​分类筛选​​(如按价格/销量排序)
模式切换​​ (编辑模式/预览模式,基础版/高级版视图,本地/云端存储模式)

QRadioButton类使用

1.简单使用

// 创建按钮
QRadioButton *radio1 = new QRadioButton("Option 1");
QRadioButton *radio2 = new QRadioButton("Option 2");
QRadioButton *radio3 = new QRadioButton("Option 3");

// 分组管理(确保互斥)
QButtonGroup *group = new QButtonGroup(this);
group->addButton(radio1, 1);  // ID=1
group->addButton(radio2, 2);  // ID=2
group->addButton(radio3, 3);  // ID=3

// 连接信号(推荐使用 toggled 或 QButtonGroup 的信号)
connect(radio1, &QRadioButton::toggled, [](bool checked) {
    if (checked) qDebug() << "Option 1 selected!";
});

// 通过QButtonGroup获取选中ID
connect(group, QOverload<int>::of(&QButtonGroup::buttonClicked),
        [](int id) { qDebug() << "Selected ID:" << id; });

// 获取当前选中
QPushButton *submit = new QPushButton("确认");
connect(submit, &QPushButton::clicked, [=](){
    qDebug() << "当前选择:" << group->checkedButton()->text();
});

vlayout->addWidget(radio1);
vlayout->addWidget(radio2);
vlayout->addWidget(radio3);
vlayout->addWidget(submit);

2 设置

QGroupBox *groupBox = new QGroupBox("设置选项", this);
QGridLayout *layout_groupBox = new QGridLayout(groupBox);
 vlayout->addWidget(groupBox);
//2.1语言选择
QLabel *langLabel = new QLabel("语言:");
QButtonGroup *langGroup = new QButtonGroup(groupBox);
QRadioButton *langCN = new QRadioButton("中文");
QRadioButton *langEN = new QRadioButton("英文");
langGroup->addButton(langCN, 0); // 0代表中文
langGroup->addButton(langEN, 1); // 1代表英文
layout_groupBox->addWidget(langLabel, 0, 0);
layout_groupBox->addWidget(langCN, 0, 1);
layout_groupBox->addWidget(langEN, 0, 2);

//2.3 主题选择
QLabel *themeLabel = new QLabel("主题:");
QButtonGroup *themeGroup = new QButtonGroup(groupBox);
QRadioButton *themeLight = new QRadioButton("亮色");
QRadioButton *themeDark = new QRadioButton("暗色");
themeGroup->addButton(themeLight, 0); // 0代表亮色
themeGroup->addButton(themeDark, 1);  // 1代表暗色
layout_groupBox->addWidget(themeLabel, 1, 0);
layout_groupBox->addWidget(themeLight, 1, 1);
layout_groupBox->addWidget(themeDark, 1, 2);

//2.4 单位制式
QLabel *unitLabel = new QLabel("单位制式:");
QButtonGroup *unitGroup = new QButtonGroup(groupBox);
QRadioButton *unitMetric = new QRadioButton("公制");
QRadioButton *unitImperial = new QRadioButton("英制");
unitGroup->addButton(unitMetric, 0); // 0代表公制
unitGroup->addButton(unitImperial, 1); // 1代表英制
layout_groupBox->addWidget(unitLabel, 2, 0);
layout_groupBox->addWidget(unitMetric, 2, 1);
layout_groupBox->addWidget(unitImperial, 2, 2);

3 表单填写组

QGroupBox *groupBox_3 = new QGroupBox("表单填写", this);
QGridLayout *layout_groupBox_3 = new QGridLayout(groupBox_3);
vlayout->addWidget(groupBox_3);

// 性别选择
QLabel *genderLabel = new QLabel("性别:");
QButtonGroup *genderGroup = new QButtonGroup(groupBox_3);
QRadioButton *male = new QRadioButton("男");
QRadioButton *female = new QRadioButton("女");
QRadioButton *other = new QRadioButton("其他");
genderGroup->addButton(male, 0);
genderGroup->addButton(female, 1);
genderGroup->addButton(other, 2);

// 支付方式
QLabel *paymentLabel = new QLabel("支付方式:");
QButtonGroup *paymentGroup = new QButtonGroup(groupBox_3);
QRadioButton *cash = new QRadioButton("现金");
QRadioButton *card = new QRadioButton("信用卡");
QRadioButton *alipay = new QRadioButton("支付宝");
QRadioButton *wechat = new QRadioButton("微信支付");
paymentGroup->addButton(cash, 0);
paymentGroup->addButton(card, 1);
paymentGroup->addButton(alipay, 2);
paymentGroup->addButton(wechat, 3);

// 提交按钮
QPushButton *submitButton = new QPushButton("提交表单");
connect(submitButton, &QPushButton::clicked, this, &TestRadioButton::submitForm);

// 添加到布局
layout_groupBox_3->addWidget(genderLabel, 0, 0);
layout_groupBox_3->addWidget(male, 0, 1);
layout_groupBox_3->addWidget(female, 0, 2);
layout_groupBox_3->addWidget(other, 0, 3);

layout_groupBox_3->addWidget(paymentLabel, 1, 0);
layout_groupBox_3->addWidget(cash, 1, 1);
layout_groupBox_3->addWidget(card, 1, 2);
layout_groupBox_3->addWidget(alipay, 1, 3);
layout_groupBox_3->addWidget(wechat, 1, 4);

layout_groupBox_3->addWidget(submitButton, 2, 0, 1, 5, Qt::AlignCenter);

QButtonGroup类使用

添加按钮并设置 ID

buttonGroup->addButton(button1, 1); // 第二个参数为按钮 ID
buttonGroup->addButton(button2, 2);

设置互斥性(默认开启)

buttonGroup->setExclusive(true); // 单选模式(互斥)
// buttonGroup->setExclusive(false); // 允许多选

获取选中按钮​

QAbstractButton *selected = buttonGroup->checkedButton();
int selectedId = buttonGroup->checkedId(); // 返回 -1 表示无选中
buttonGroup->checkedButton()->text();

遍历按钮​

QList<QAbstractButton*> buttons = buttonGroup->buttons();
for (auto *btn : buttons) {
    // 处理按钮
}

QRadioButton类使用效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值