以下是一个使用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的元对象系统
关键点解析:
- 按钮组创建:
- 使用
QButtonGroup管理单选按钮,自动实现互斥选择 - 通过
addButton(button, id)添加按钮时可以指定自定义ID
- 使用
- 布局管理:
- 使用
QVBoxLayout和QHBoxLayout组合实现垂直+水平布局 - 按钮默认水平排列,可通过修改布局方向调整
- 使用
- 信号槽连接(三种方式):
- 方式1:通过按钮组的
idClicked信号获取自定义ID - 方式2:直接连接单个按钮的
toggled信号 - 方式3:通过
buttonToggled信号获取选中按钮对象
- 方式1:通过按钮组的
- 状态反馈:
- 使用
QLabel实时显示当前选中状态 - 控制台输出调试信息(
qDebug())
- 使用
- 扩展功能:
- 设置默认选中:
btnOption1->setChecked(true) - 获取选中按钮:
QAbstractButton *selectedBtn = btnGroup->checkedButton(); int selectedId = btnGroup->checkedId();
- 设置默认选中:
运行效果:
- 窗口显示三个水平排列的单选按钮
- 默认选中"选项一"
- 选择不同选项时:
- 标签文字实时更新
- 控制台输出选中ID
- 按钮组自动处理互斥逻辑
典型应用场景:
- 配置选项选择(如:分辨率设置、主题选择)
- 表单填写中的单选问题
- 游戏难度选择
- 任何需要从多个互斥选项中选择一个的场景
可以根据实际需求:
- 修改按钮文本内容
- 调整布局方式(垂直排列、网格排列等)
- 添加样式表美化界面
- 扩展选择后的业务逻辑处理
367

被折叠的 条评论
为什么被折叠?



