qt QRadioButton 总结

1. QRadioButton 基本概念

  • 用途:用于单选场景,同一分组中仅允许一个按钮被选中。

  • 继承关系:继承自 QAbstractButton,支持按钮的通用特性(如点击事件、状态切换)。

  • 默认行为:同一父容器下的多个 QRadioButton 自动形成互斥组(排他性)。


2. 创建与分组

创建实例
QRadioButton *radio1 = new QRadioButton("Option 1", parentWidget);
QRadioButton *radio2 = new QRadioButton("Option 2", parentWidget);

手动分组

  • 方法 1:使用 QButtonGroup(推荐,灵活控制分组):
QButtonGroup *group = new QButtonGroup(parent);
group->addButton(radio1);
group->addButton(radio2);
  • 方法 2:放入同一父容器(如 QGroupBox 或 QWidget)中,利用默认排他性。

3. 信号与槽

常用信号:
  • toggled(bool checked):按钮选中状态变化时触发。

  • clicked():按钮被点击时触发(不关心状态变化)。

示例连接:
connect(radio1, &QRadioButton::toggled, [](bool checked) {
    if (checked) qDebug() << "Option 1 selected!";
});

4. 样式定制(QSS)

  • 通过 Qt 样式表自定义外观:
radio1->setStyleSheet(
    "QRadioButton::indicator { width: 20px; height: 20px; }"
    "QRadioButton::indicator:checked { background-color: #FFA500; }"
);

5. 获取选中状态

  • 遍历检查:
for (auto btn : group->buttons()) {
    if (btn->isChecked()) {
        qDebug() << "Selected:" << btn->text();
    }
}
  • 直接获取(通过 QButtonGroup):
QAbstractButton *selected = group->checkedButton();
if (selected) qDebug() << "Selected:" << selected->text();

6. 常用方法

  • setChecked(true):默认选中。

  • isChecked():检查是否选中。

  • setText() / text():设置或获取显示文本。

  • setEnabled(false):禁用按钮。


7. 注意事项

  • 分组管理:跨父容器的按钮需通过 QButtonGroup 分组。

  • 默认选中:需手动调用 setChecked(true) 初始化选中状态。

  • 内存管理:建议设置父对象,利用 Qt 对象树自动释放内存。

  • 排他性:若需关闭自动互斥,使用 setAutoExclusive(false)(罕见需求)。


8. 完整示例

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

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QRadioButton *radio1 = new QRadioButton("Option 1");
    QRadioButton *radio2 = new QRadioButton("Option 2");
    radio2->setChecked(true); // 默认选中

    QButtonGroup group;
    group.addButton(radio1);
    group.addButton(radio2);

    layout->addWidget(radio1);
    layout->addWidget(radio2);

    QObject::connect(radio1, &QRadioButton::toggled, [&](bool checked) {
        if (checked) qDebug() << "Option 1 selected!";
    });

    window.show();
    return a.exec();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

enyp80

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

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

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

打赏作者

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

抵扣说明:

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

余额充值