Qt QRadioButton单选按钮控件

文章目录

  • 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python学习】Python学习12-字典

目录 【Python学习】Python学习12-字典 前言创建语法访问列表中的值修改与新增字典删除字典元素Python字典内置函数&方法参考 文章所属专区 Python学习 前言 本章节主要说明Python的字典&#xff0c;是可变的容器&#xff0c;每个字典由键值对组成用冒号隔开&#xff0c;…

预训练中文GPT2(包括重新训练tokenizer)

训练数据 1.json后缀的文件 2.数据是json line格式&#xff0c;一行一条json 3. json结构如下 {"content": "①北京和上海户籍的游客可获得韩国多次签证&#xff1b;②“整容客”可以不经由韩国使领馆、直接在网上申请签证&#xff1b;③中泰免签的实施日期…

SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 设计模式-单例模式-饿汉式单例模式、懒汉式单例模式、静态内部类在Java中的使用示例&#xff1a; 设计模式-单例模…

Android SDK环境搭建[图解]; 解决问题Done. Nothing was installed.

安装SDK Android SDK环境搭建 依赖java环境,需要自备Java环境 (100%实操成功) 目录 1. 解压&#xff1a;解压到非中文无特殊字符的目录 2. 双击&#xff1a;SDK Manager.exe&#xff0c;不要选全部!不要选全部!不要选全部!(会下很久) 3. 然后勾选组件​ 4. 设置环境变量 …

安装ubuntu22.04系统,GPU驱动,cuda,cudnn,python环境,pycharm

需要准备一个u盘&#xff0c;需要格式化&#xff0c;且内存不小于8g 1 下载ubuntu镜像 下载链接&#xff1a; https://cn.ubuntu.com/download/desktop 2下载rufus Rufus - 轻松创建 USB 启动盘Rufus: Create bootable USB drives the easy wayhttps://rufus.ie/zh/ 准备好这…

用Linux的视角来理解缓冲区概念

缓冲区的认识 缓冲区&#xff08;buffer&#xff09;是存储数据的临时存储区域。当我们用C语言向文件中写入数据时&#xff0c;数据并不会直接的写到文件中&#xff0c;中途还经过了缓冲区&#xff0c;而我们需要对缓冲区的数据进行刷新&#xff0c;那么数据才算写到文件当中。…

STL之list

目录 list定义和结构 list容器模板接受两个参数&#xff1a; list容器的特点 双向性 动态大小 不连续存储 实例 代码输出 需要注意的点 list常用函数 代码示例 list定义和结构 list的使用频率不高&#xff0c;在做题时极少遇到需要使用list的情景。 list是一种双向…

LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

题目描述&#xff1a; 解题思路&#xff1a; 创建两个栈&#xff0c;一个用于入数据&#xff0c;一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据&#xff0c;先检查popST中有无数据&#xff0c;如果有数据&#xff0c;就直接出。如果没…

Xcode15 升级问题记录

这里写自定义目录标题 新版本Xcode15升级问题1&#xff1a;rsync error: some files could not be transferred (code 23) at ...参考 新版本Xcode15升级 下载地址&#xff1a;https://developer.apple.com/download/all/ 我目前使用的版本是Xcode15.2 我新创建了一个项目&…

建立四叉树[中等]

一、题目 给你一个n * n矩阵grid&#xff0c;矩阵由若干0和1组成。请你用四叉树表示该矩阵grid。你需要返回能表示矩阵grid的四叉树的根结点。四叉树数据结构中&#xff0c;每个内部节点只有四个子节点。此外&#xff0c;每个节点都有两个属性&#xff1a; 【1】val&#xff1…

使用SpringCache操作Redis缓存数据

SpringCache概念 SpringCache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单的加一个注解&#xff0c;就能实现缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCacheCaffeineRedis 使…

怎么在unity3D工程中导入Newtonsoft.Json

打开 Unity 编辑器。 转到菜单栏的 “Window”&#xff08;窗口&#xff09;选项&#xff0c;然后选择 “Package Manager”&#xff08;包管理器&#xff09; 在搜索框中输入 “Newtonsoft Json” 进行搜索。 注意&#xff1a;要选择Unity Registry 在搜索结果中&#xf…

强化学习求解TSP(五):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

Windows下安装mariadb10.5数据库及配置详细教程

1、简介 MariaDB数据库管理系统是一款MySQL的替代数据库。MariaDB由MySQL的创始人麦克尔维德纽斯主导开发&#xff0c;是可扩展的&#xff0c;可靠的SQL服务器的合乎逻辑的选择&#xff0c;MariaDB 10.5 是 MariaDB 当前的稳定系列。 2、下载 下载地址&#xff1a;Download M…

【FPGA/verilog -入门学习17】vivado 实现串口自发自收程序

1&#xff0c;需求 PC使用串口助手给FPGA板发送9600 波特率的数据&#xff0c;FPGA板接收到数据后&#xff0c;回复同样的数据给PC 2&#xff0c;需求分析 按模块可以划分为&#xff1a; rx接收模块&#xff0c;将输入的8位并行rx 数据转换成[7:0]rx_data 信号&#xff0c;当…

圣诞老人遇见 GenAI:利用大语言模型、LangChain 和 Elasticsearch 破译手写的圣诞信件

在北极的中心地带&#xff0c;圣诞老人的精灵团队面临着巨大的后勤挑战&#xff1a;如何处理来自世界各地儿童的数百万封信件。 圣诞老人表情坚定&#xff0c;他决定是时候将人工智能纳入圣诞节行动了。 圣诞老人坐在配备了最新人工智能技术的电脑前&#xff0c;开始在 Jupyter…

【Linux】Ubuntu 解压 zip、z01、z02等压缩文件的方法,Linux如何解压分卷压缩的

zip分卷压缩&#xff0c;在windows上压缩来的&#xff0c;如何解压这种文件&#xff1a; -rw-rw-r-- 1 20401094656 Dec 10 20:06 FFHQ.z01 -rw-rw-r-- 1 20401094656 Dec 10 20:10 FFHQ.z02 -rw-rw-r-- 1 20401094656 Dec 10 23:22 FFHQ.z03 -rw-rw-r-- 1 20401094656 Dec 10…

docker微服务案例

文章目录 建立简单的springboot项目(boot3)boot2建立通过dockerfile发布微服务部署到docker容器编写Dockerfile打包成镜像运行镜像微服务 建立简单的springboot项目(boot3) 1.建立module 2. 改pom <?xml version"1.0" encoding"UTF-8"?> <…

通过反射修改MultipartFile类文件名

1、背景 项目上有这样一个需求&#xff0c;前端传文件过来&#xff0c;后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…

鸿蒙HarmonyOS学习手册_入门篇

鸿蒙HarmonyOS学习手册_入门篇 文章目录 鸿蒙HarmonyOS学习手册_入门篇入门快速入门开发准备基本概念UI框架应用模型工具准备 构建第一个ArkTS应用&#xff08;Stage模型&#xff09;-快速入门-入门创建ArkTS工程ArkTS工程目录结构&#xff08;Stage模型&#xff09;构建第一个…