Qt QRadioButton单选按钮控件

news2024/12/25 23:59:04

文章目录

  • 1 属性和方法
    • 1.1 文本
    • 1.2 选中状态
    • 1.3 自动排他
    • 1.4 信号和槽
  • 2 实例
    • 2.1 布局
    • 2.2 代码实现

  • Qt中的单选按钮类是QRadioButton
  • 它是一个可以切换选中(checked)或未选中(unchecked)状态的单选按钮
  • 单选按钮常用在“多选一”的场景,也就是说,在一组单选按钮中,一次只能选中一个单选按钮
  • 比如性别中的“男女”二选一,学历中的“博士/硕士/本科/其他”四选一,等等。

1 属性和方法

QRadioButton有很多属性,完整的可查看帮助文档。这里列出常用的属性和方法:

1.1 文本

这两个是其父类QAbstractButton中的属性和方法,因此QPushButtonQRadioButtonQCheckBox都具有该属性

// 获取和设置显示的文本
QString text() const;
void setText(const QString &text);

1.2 选中状态

// 获取和设置单选按钮的选中状态
bool isChecked() const;
void setChecked(bool);

可见,切换单选按钮的选中状态,有两种方式:

  • 通过鼠标点击实现
  • 在代码中使用setChecked(bool)来实现

1.3 自动排他

我们前面说过,单选按钮实现的是“多选一”,因此单选按钮的该属性默认是使能的

// 获取和设置自动排他
bool autoExclusive() const;
void setAutoExclusive(bool);

而对于多选按钮,也叫复选按钮-QCheckBox,通常的场景是用户选择一组按钮中的多个,因此该属性默认是禁能的。

综合以上,“多选一”要满足以下两个条件:

  • 把同一组的单选按钮,放在同一个布局中。不同的组的单选按钮,放在不同的布局中
  • 选按钮的autoExclusive属性设置为true,单选按钮的该属性默认是使能的。可在右侧的属性按钮中看到,如下:
  • 在这里插入图片描述

1.4 信号和槽

按钮在按下和抬起的过程中,会发射多个信号。

// 单选按钮 QRadioButton 被点击时,会发出该信号
void clicked();

// 当单选按钮的选中状态发送改变时,会发射信号
// 所谓状态改变,是指选中变为非选中,和非选中变为选中
void toggled(bool checked);

2 实例

该案例演示,单选按钮的属性以及信号槽

在这里插入图片描述

2.1 布局

在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局

在这里插入图片描述

在这里插入图片描述

2.2 代码实现

// 在widget.cpp 中

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
    ui->setupUi(this);

    // 设置第二组默认显示
    ui->rbMale2->setChecked(true);
    ui->rbDoctor2->setChecked(true);

    // 设置第三组默认显示
    ui->rbMale3->setChecked(true);
    ui->rbDoctor3->setChecked(true);
    ui->leResult3->setText(ui->rbMale3->text() + ui->rbDoctor3->text());

    // 按钮分组
    mBtnGroupGender = new QButtonGroup(this);
    mBtnGroupGender->addButton(ui->rbMale4, 0);
    mBtnGroupGender->addButton(ui->rbFemale4, 1);

    mBtnGroupEdu = new QButtonGroup(this);
    mBtnGroupEdu->addButton(ui->rbDoctor4, 10);
    mBtnGroupEdu->addButton(ui->rbMaster4, 11);
    mBtnGroupEdu->addButton(ui->rbBachelor4, 12);
    mBtnGroupEdu->addButton(ui->rbOther4, 13);

    // 设置第四组默认显示
    ui->rbMale4->setChecked(true);
    ui->rbDoctor4->setChecked(true);
    ui->leResult4->setText(ui->rbMale4->text() + ui->rbDoctor4->text());

    connect(ui->rbMale4, &QRadioButton::clicked, this,
            &Widget::onRadioButtonClicked);
    connect(ui->rbFemale4, &QRadioButton::clicked, this,
            &Widget::onRadioButtonClicked);
    connect(ui->rbDoctor4, &QRadioButton::clicked, this,
            &Widget::onRadioButtonClicked);
    connect(ui->rbMaster4, &QRadioButton::clicked, this,
            &Widget::onRadioButtonClicked);
    connect(ui->rbBachelor4, &QRadioButton::clicked, this,
            &Widget::onRadioButtonClicked);
    connect(ui->rbOther4, &QRadioButton::clicked, this,
            &Widget::onRadioButtonClicked);
}

Widget::~Widget() {
    delete ui;
}

void Widget::on_pushButton_clicked() {
    QString s;
    // 获取男女的选中
    if (ui->rbMale3->isChecked()) {
        s += ui->rbMale3->text();
    } else if (ui->rbFemale3->isChecked()) {
        s += ui->rbFemale3->text();
    }

    // 学历的选中
    if (ui->rbDoctor3->isChecked()) {
        s += ui->rbDoctor3->text();
    } else if (ui->rbMaster3->isChecked()) {
        s += ui->rbMaster3->text();
    } else if (ui->rbBachelor3->isChecked()) {
        s += ui->rbBachelor3->text();
    } else if (ui->rbOther3->isChecked()) {
        s += ui->rbOther3->text();
    }

    // 显示到文本框
    ui->leResult3->setText(s);
}

void Widget::onRadioButtonClicked() {
    QString s;

    int checkedGenderId = mBtnGroupGender->checkedId();
    if (checkedGenderId == 0) {
        s += "男";
    } else if (checkedGenderId == 1) {
        s += "女";
    }

    int checkedEduId = mBtnGroupEdu->checkedId();
    if (checkedEduId == 10) {
        s += "博士";
    } else if (checkedEduId == 11) {
        s += "硕士";
    } else if (checkedEduId == 12) {
        s += "本科";
    } else if (checkedEduId == 13) {
        s += "其他";
    }
    ui->leResult4->setText(s);
}

void Widget::on_rbMale4_toggled(bool checked) {
    qDebug() << "rbMale4 status changed" << checked;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1374100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习工程师学习路线图

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 机器学习工程&#xff08;MLE&#xff09;是一个快速发展的领域&#xff0c;对熟练专业人员的需求很高。如果您对 MLE 职业感兴趣&#xff0c;路线图可以帮助您培养…

大小论文over,坐等毕业。写点ROS上建图与导航的心得,也不知道对错,欢迎讨论~(对,谨慎阅读,不存在误人子弟哈~.~)

大小论文总算是都搞定了&#xff0c;院审过了送外审了&#xff0c;生死有命富贵在天&#xff0c;希望外审专家大佬们高抬贵手o.O~ 我所理解的建图算法的移植&#xff0c;能不能运行起来&#xff0c;大框架上就是把一棵完整的坐标转换关系的TF树给整理“通顺”&#xff0c;TF&am…

一文搞懂Git版本工具常用的操作命令

简述 Git是一个分布式的版本控制工具,其在使用上要比SVN等版本控制工具稍显复杂。为了便于理解,本文通过图文方式详细介绍Git的使用,以便于快速掌握Git。Git涉及的主要概念和命令如图所示。理解上述概念后,基本可以使用Git完成日常开发工作。关于Git的介绍以及常用命令在之前的…

RK3568驱动指南|第十篇 热插拔-第116章netlink监听广播信息实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

CES 2024:AI智能大爆发,引领科技新纪元

美国当地时间1月9日&#xff0c;2024年国际消费类电子产品展览会&#xff08;CES&#xff09;如期在内华达州拉斯维加斯举行。作为全球最盛大的科技盛会&#xff0c;每年&#xff0c;来自世界各地的顶尖科技企业都会参加CES&#xff0c;展示他们的最新科技产品和创新&#xff0…

Python的安装与卸载【Windows系统】

在 Windows 上安装与卸载 Python Python的安装 下载Python 安装Python 下载完后打开安装包 注意最底下的"Add Python 3.8 to Path"&#xff08;将Python加入环境变量&#xff09;一定要勾选&#xff01;&#xff01;&#xff01;这样就可以免去之后环境配置的烦恼…

在本地测试nginx中localhost不行,需要写成127.0.0.1

在Windows 10系统的命令提示符cmd中&#xff0c;执行命令ping localhost&#xff0c;并没有出现我与其的ip地址“127.0.0.1”&#xff0c;而是“[::1]”。 问题原因 在cmd中ping localhost解析出来的是ipv6的::1的原因是windows有个优先解析列表&#xff0c;当ipv6的优先级高于…

【cmu15445c++入门】(4)c++中的模板方法

一、template模板方法 模板方法是c的一个特性&#xff0c;可以让你的代码在不指定数据类型的情况下&#xff0c;运行不同的数据类型。 你可以创建模板方法和模板类&#xff0c;本文讨论模板方法。 二、代码 // Includes std::cout (printing) for demo purposes. #include &…

4S店汽车行业万能通用小程序源码系统:功能强大,集合汽车在线展示+在线预约+贷款计算器......附带完整的搭建教程

在移动互联网高速发展的今天&#xff0c;越来越多的消费者选择通过手机端了解汽车信息、预约试驾、计算贷款等。4S店需要紧跟时代步伐&#xff0c;提供更加便捷、高效的服务。因此&#xff0c;开发一款集合汽车在线展示、在线预约、贷款计算器等多项功能的通用小程序成为市场趋…

数据结构02附录02:哈希表[C++]

图源&#xff1a;文心一言 上机题目练习整理~&#x1f95d;&#x1f95d; 本篇作为线性表的代码补充&#xff0c;每道题提供了优解和暴力解算法&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;在力扣新手村刷题的记录&#xff0c;优解是Bard老师提…

语义补全任务2023年论文总结

一、3D Semantic Scene Completion: a Survey 语义场景补全SSC旨在联合估计出一个场景完整的几何和语义信息&#xff0c;假设只需要部分稀疏输入数据。 1、数据集 2、场景表示 Point Cloud&#xff0c;点云是一种方便的、记忆高效的表示方法&#xff0c;它将三维连续世界中的…

网站怎么做google搜索引擎优化?

网站想做google搜索引擎优化&#xff0c;作为大前提&#xff0c;您必须确保网站本身符合google规范&#xff0c;我们不少客户实际上就连这点都无法做到 有不少客户公司自己本身有技术&#xff0c;就自己弄一个网站出来&#xff0c;做网站本身不是难事&#xff0c;但前提是您需要…

OpenShift 4 - 在 OpenShift 上运行物体检测 AI 应用

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.14 RHODS 2.5.0 的环境中验证 说明&#xff1a;请先根据《OpenShift 4 - 部署 OpenShift AI 环境&#xff0c;运行 AI/ML 应用&#xff08;视频&#xff09;》一文完成 OpenShift AI 环境…

基于k8s Deployment的弹性扩缩容及滚动发布机制详解

k8s第一个重要设计思想&#xff1a;控制器模式。k8s里第一个控制器模式的完整实现&#xff1a;Deployment。它实现了k8s一大重要功能&#xff1a;Pod的“水平扩展/收缩”&#xff08;horizontal scaling out/in&#xff09;。该功能从PaaS时代开始就是一个平台级项目必备编排能…

Kali改变为中文

更新kali源之后【如果没有更新&#xff0c;可以参考我的Kakli更新源】。 执行下面的命令&#xff1a; # apt-get update && apt-get upgrade && apt-get clean # dpkg-reconfigure locales 如果没有权限&#xff1f;可以通过sudo命令进行授权 1、先取消英文&…

KT6368A双模蓝牙芯片批量生产使用主机芯片KT6358M测试很方便

一、简介 KT6368A双模蓝牙芯片批量生产使用主机芯片测试很方便 KT6368A批量生产怎么办&#xff1f;不可能用手机一个一个的去连吧&#xff0c;太慢了 别慌&#xff0c;这个问题&#xff0c;我们早就考虑清楚了&#xff0c;答案如下&#xff0c;分为两个方法&#xff1a; 详细…

2024数字安全十大技术趋势预测,不容忽视!

2023年是技术爆发的一年&#xff0c;ChatGPT、量子计算、常温超导体争相刷新眼球&#xff1b;2023年是风云变幻的一年&#xff0c;局部战争、网络战、全球经济震荡交替冲击……无数个值得记忆的瞬间&#xff0c;都对网络安全行业产生着深远影响。 通过观察2023年的国际国内环境…

路由器实验总结(静态路由配置)

1、静态路由的配置 R2(config)#int s0/0/0 R2(config)#ip add 192.168.3.2 255.255.255.0 R2(config)# no shut R1(config)#int s0/0/0 R1(config)#ip add 192.168.3.1 255.255.255.0 R1(config)# no shut串口的配置是这样的&#xff0c;静态路由如下&#xff1a; R2(config)#…

项目经理快速晋升应当具备的四个能力

项目的成功与失败都直接压在项目经理的肩上。不论问题的根源在何处&#xff0c;最终承担责任的总是项目经理。身为项目经理&#xff0c;你务必清楚&#xff0c;自己背负的是何等的重任。 1、计划能力 计划是行动的灯塔&#xff0c;若管理者无法制定计划&#xff0c;又如何引…

低功耗智能雨量监测站现代化雨水情监测网络

低功耗智能雨量监测站现代化雨水情监测网络产品概述 低功耗雨量监测站基于传感技术、无线通信、处理与控制等物联网技术的开发&#xff0c;利用传感技术&#xff0c;通过传感器测量降雨量&#xff0c;并使用物联网进行传输。无需专门的通信线路&#xff0c;在联网的状态下&…