当前位置: 首页 > news >正文

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();
}

相关文章:

  • C++11新特性之别名模版
  • Python--网络编程
  • 【C++前缀和】1906. 查询差绝对值的最小值|2146
  • DeepSeek-R1-Distill-Qwen-1.5B模型的深度解析
  • Vue.js 组件 - 自定义事件
  • 当通用智能遇到深度推理:如何正确驾驭DeepSeek-V3与R1?
  • 解决Windows11复制文件到桌面会跑左上角第2个位置导致桌面图标位置错乱问题
  • 算法11-分治算法
  • C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析
  • 数据结构与算法之排序算法-归并排序
  • 节目选择器安卓软件编写(针对老年人)
  • 面试完整回答:SQL 分页查询中 limit 500000,10和 limit 10 速度一样快吗?
  • 生成式人工智能:技术革命与应用图景
  • 理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁
  • 数学建模基础训练-1:概念解析
  • AUTOSAR MCAL层ETH模块(1)——通信原理
  • 【VSCode】一键清理旧版本插件脚本(Mac或者Windows都可)
  • 算法19(力扣244)反转字符串
  • opencascade 获取edge起始点 会出现终点与实际不同的情况
  • Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
  • 证监会:2024年依法从严查办证券期货违法案件739件,作出处罚决定592件、同比增10%
  • 丹麦外交大臣拉斯穆森将访华
  • 人民日报:从“轻微免罚”看涉企执法方式转变
  • 著名植物学家、园艺学家,国际植物园协会原主席贺善安逝世
  • 在古老的意大利科莫歌剧院,廖昌永唱响16首中国艺术歌曲
  • 首个偏头痛急性治疗药物可缓解前期症状