【Qt 学习笔记】Qt常用控件 | 按钮类控件Radio Button的使用及说明

news2024/9/21 20:28:27

  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt常用控件 | 按钮类控件Radio Button的使用及说明

文章编号:Qt 学习笔记 / 22

文章目录

  • Qt常用控件 | 按钮类控件Radio Button的使用及说明
    • 一、QAbstractButton类
      • 1. 介绍
      • 2. QAbstractButton的子类
    • 二、QRadioButton介绍
      • 1. 简介
      • 2. 常用属性及方法
    • 三、QRadioButton的使用(代码示例)
      • 1. 使用代码编写选择性别
      • 2. 查看click, press, release, toggled的区别
      • 3. 单选框分组(QButtonGroup的使用)


一、QAbstractButton类

1. 介绍

QAbstractButton类是Qt中所有按钮类的基类,它提供了一些基本的按钮功能和属性。它是一个抽象类,不能直接实例化,而是通过继承它来创建具体的按钮类。

通过继承QAbstractButton类,我们可以创建不同类型的按钮,如QPushButton、QCheckBox、QRadioButton等。这些具体的按钮类会继承并扩展QAbstractButton类的功能,以实现不同类型按钮的特定功能。

2. QAbstractButton的子类

类名功能
QPushButton提供了一个可以点击的按钮。
QRadioButton提供了一个单选按钮。
QCheckBox提供了一个多选按钮。
QToolButton提供了一个更小的按钮,通常用于工具栏上。
QCommandLinkButton提供了一个带有说明文本的按钮。
QDialogButtonBox通常用于创建对话框,并提供了一组预定义的按钮,如Ok、Cancel、Apply等

在这里插入图片描述


二、QRadioButton介绍

1. 简介

在Qt中,QRadioButton是一种可以在用户界面中选择某个选项的按钮控件。它被设计为一组互斥的按钮,意味着在同一组中只能选择一个单选按钮。

QRadioButton继承自QAbstractButton,因此它具有一些共同的功能,例如设置文本、图标、状态等。它还可以发出clicked()信号,以便在用户单击按钮时执行相应的操作。

要使用QRadioButton,首先需要创建一个QRadioButton对象,并设置其文本。然后,可以将其添加到窗口或布局中,以便在应用程序中显示。在设计应用程序时,可以将多个QRadioButton对象放置在同一窗口中,并将它们分为不同的组,以实现单选按钮的功能。

通过使用QButtonGroup类,可以将多个QRadioButton对象分为不同的组。这样,在同一组中只能选择一个单选按钮。可以使用QButtonGroup的addButton()方法将QRadioButton对象添加到组中,并使用setId()方法为每个按钮设置唯一的ID。

2. 常用属性及方法

QRadioButton具有以下属性:

  • text(): 用于获取单选按钮的文本标签。

  • setText(const QString &text): 用于设置单选按钮的文本标签。

  • isChecked(): 用于检查单选按钮是否被选中。

  • setChecked(bool checked): 用于设置单选按钮是否被选中。

  • setIcon(const QIcon &icon): 设置单选按钮的图标。

  • setIconSize(const QSize &size): 设置单选按钮的图标大小。

  • setAutoExclusive(bool exclusive): 设置单选按钮是否自动排除其他已选中的单选按钮。

QAbstractButton 中和 QRadioButton 关系较大的属性

属性说明
checkable是否能选中
checked是否已经被选中. checkable 是 checked 的前提条件.
autoExclusive是否排他.选中⼀个按钮之后是否会取消其他按钮的选中.对于 QRadioButton 来说默认就是排他的

三、QRadioButton的使用(代码示例)

1. 使用代码编写选择性别

  1. 在界⾯上创建⼀个 label, 和 3 个 单选按钮RadioButton
    在这里插入图片描述

  2. 修改 widget.cpp, 编辑三个QRadioButton的 slot 函数
    在这里插入图片描述

  3. 设置默认选项,让程序启动默认选中性别男
    在这里插入图片描述

  4. 设置禁用的选项,有两种方式(一种不彻底一种彻底)
    在这里插入图片描述

  5. 运行程序,就可以选择性别,label 中的提示文字就会随之变化
    在这里插入图片描述

文件代码:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_radioButton_male_clicked();

    void on_radioButton_female_clicked();

    void on_radioButton_other_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置默认选项
    ui->radioButton_male->setChecked(true);
    ui->label->setText("请选择你的性别:男");

    //设置禁用选项
    //ui->radioButton_other->setCheckable(false);

    ui->radioButton_other->setEnabled(false);
}

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


void Widget::on_radioButton_male_clicked()
{
    ui->label->setText("请选择你的性别:男");
}

void Widget::on_radioButton_female_clicked()
{
    ui->label->setText("请选择你的性别:女");
}

void Widget::on_radioButton_other_clicked()
{
    ui->label->setText("请选择你的性别:私密");
}

2. 查看click, press, release, toggled的区别

  1. 在界⾯上创建四个单选按钮
    在这里插入图片描述
  2. 给 1 创建 clicked 槽函数, 给 2 创建 pressed 槽函数, 给 3 创建 released 槽函数,给 4 创建 toggled 槽函数
    在这里插入图片描述
  3. 运⾏程序, 可以看到
    在这里插入图片描述
  • clicked 是⼀次⿏标按下+⿏标释放触发的.
  • pressed 是⿏标按下触发的.
  • released 是⿏标释放触发的.
  • toggled 是 checked 属性改变时触发的.

文件代码:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_radioButton_clicked();

    void on_radioButton_2_pressed();

    void on_radioButton_3_released();

    void on_radioButton_4_toggled(bool checked);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

}

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


void Widget::on_radioButton_clicked()
{
    qDebug()<<"clicked";
}

void Widget::on_radioButton_2_pressed()
{
    qDebug()<<"pressed";
}

void Widget::on_radioButton_3_released()
{
    qDebug()<<"released";
}

void Widget::on_radioButton_4_toggled(bool checked)
{
    if(checked)
    {
        qDebug()<<"toggled checked true";
    }
    else
    {
        qDebug()<<"toggled checked false";
    }
}

3. 单选框分组(QButtonGroup的使用)

  1. 在界⾯上创建 6 个单选框, ⽤来模拟肯德基点餐界⾯
    此时直接运⾏程序, 可以看到, 这六个 QRadioButton 之间都是排他的.
    在这里插入图片描述
  2. 引⼊ QButtonGroup 进⾏分组.并编辑widget.cpp
    在这里插入图片描述
  3. 运行结果,就可以分开选择了
    在这里插入图片描述

文件代码:

#include "widget.h"
#include "ui_widget.h"
#include<QButtonGroup>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
     //创建三个 QButtonGroup
     QButtonGroup* group1 = new QButtonGroup(this);
     QButtonGroup* group2 = new QButtonGroup(this);
     QButtonGroup* group3 = new QButtonGroup(this);
     
     //两两⼀组, 放到三个 QButtonGroup 中.
     group1->addButton(ui->radioButton);
     group1->addButton(ui->radioButton_2);
     
     group2->addButton(ui->radioButton_3);
     group2->addButton(ui->radioButton_4);
     
     group3->addButton(ui->radioButton_5);
     group3->addButton(ui->radioButton_6);
}

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


在这里插入图片描述

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

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

相关文章

[docker] 核心知识 - 容器/镜像的管理和操作

[docker] 核心知识 - 容器/镜像的管理和操作 想要查看完整的指令&#xff0c;可以通过 docker --help 列举所有的指令&#xff0c;这里会提到一些比较常用的核心指令 查看容器的状态 这个应该是最常用的指令&#xff0c;语法为 docker ps&#xff0c; ps 为 process status …

华为欧拉系统(openEuler-22.03)安装深信服EasyConnect软件(图文详解)

欧拉镜像下载安装 iso镜像官网下载地址 选择最小化安装&#xff0c;标准模式 换华为镜像源 更换华为镜像站&#xff0c;加速下载&#xff1a; sed -i "s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g" /etc/yum.repos.d/openEuler.r…

Lobe UI - 基于 AntDesign 开发的 AIGC Web 应用的开源 UI 组件库

今天推荐一个可以快速开发 ChatGPT UI 界面的组件库&#xff0c;质量很高&#xff0c;拿来就能用。 Lobe UI 是由 lobehub 团队开发的一套 web UI 组件库&#xff0c;和我之前推荐的很多通用型的 UI 组件库不同&#xff0c;Lobe UI 是专门为目前火热的 AIGC 应用开发而打造&am…

2.整数表示

系列文章目录 信息的表示和处理 : Information Storage&#xff08;信息存储&#xff09;Integer Representation&#xff08;整数表示&#xff09;Integer Arithmetic&#xff08;整数运算&#xff09;Floating Point&#xff08;浮点数&#xff09; 文章目录 系列文章目录前…

软件设计不是CRUD(18):像搭积木一样搭建应用系统(上)——单个应用系统的搭建过程

1、概述 之前的文章本专题花了大量文字篇幅,介绍如何基于业务抽象的设计方式完成应用系统各个功能模块的设计工作。而之所以进行这样的功能模块设计无非是希望这些功能模块在具体的项目实施过程中,能够按照当时的需求快速的、简易的、稳定的、最大可能节约开发成本的形成可用…

腾讯EdgeOne产品测评体验——开启安全防护,保障数据无忧

当今时代数字化经济蓬勃发展人们的生活逐渐便利&#xff0c;类似线上购物、线上娱乐、线上会议等数字化的服务如雨后春笋般在全国遍地生长&#xff0c;在人们享受这些服务的同时也面临着各式各样的挑战&#xff0c;如网络数据会不稳定、个人隐私容易暴露、资产信息会被攻击等。…

RabbitMQ消息模型之Direct消息模型

Direct消息模型 * 路由模型&#xff1a; * 一个交换机可以绑定多个队列 * 生产者给交换机发送消息时&#xff0c;需要指定消息的路由键 * 消费者绑定队列到交换机时&#xff0c;需要指定所需要消费的信息的路由键 * 交换机会根据消息的路由键将消息转发到对应的队…

C++vector类(个人笔记)

vector类 1.熟悉vector接口以及使用1.1vector的定义1.2vector迭代器使用1.3vector空间增长1.4vector增删查改1.5vector迭代器失效问题&#xff08;重点&#xff09; 2.vector的一些笔试题3.模拟实现vector 1.熟悉vector接口以及使用 vector的C官网文档 1.1vector的定义 (con…

基于Python的卷积网络的车牌识别系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

深入剖析Tomcat(二) 实现一个简单的Servlet容器

现在开始《深入剖析Tomcat》第二章的内容&#xff0c;第一章中&#xff0c;我们编码实现了一个能正常接收HTTP请求并返回静态资源的Web容器&#xff0c;这一章开始引入Servlet的概念&#xff0c;使我们的服务能根据请求动态返回内容。 Servlet是什么&#xff1f; 这是首先要弄…

FFmpeg: 自实现ijkplayer播放器--04消息队列设计

文章目录 播放器状态转换图播放器状态对应的消息&#xff1a; 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列&#xff0c;用于发送&#xff0c;设置播放…

docker-compose yaml指定具体容器网桥ip网段subnet;docker创建即指定subnet;docker取消自启动

1、docker-compose yaml指定具体容器网桥ip网段subnet docker-compose 启动yaml有时可能的容器网段与宿主机的ip冲突导致宿主机上不了网&#xff0c;这时候可以更改yaml指定subnet 宿主机内网一般是192**&#xff0c;这时候容器可以指定172* version: 3.9 services:coredns:…

内网渗透-域环境的搭建

域环境的搭建 文章目录 域环境的搭建前言一、什么是域环境 什么是域内网基础知识点 二、域环境的搭建 1. 部署域结构2.如何加入域3.SRV出错及解决办法4.SRV记录注册不成功的可能原因 禁用域中的账户将计算机退出域添加域用户总结 前言 一、什么是域环境 什么是域 域是一种管…

盘点2024年最新可用免费云服务器

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始使用云服务器来满足各种业务需求。云服务器作为云计算的核心服务之一&#xff0c;以其弹性扩展、按需付费等特点受到广泛关注。本文将为大家盘点2024年最新可用免费云服务器&#xff0c;助力大家轻松上云&#xf…

浏览器工作原理与实践--CSRF攻击:陌生链接不要随便点

在上一篇文章中我们讲到了XSS攻击&#xff0c;XSS 的攻击方式是黑客往用户的页面中注入恶意脚本&#xff0c;然后再通过恶意脚本将用户页面的数据上传到黑客的服务器上&#xff0c;最后黑客再利用这些数据进行一些恶意操作。XSS攻击能够带来很大的破坏性&#xff0c;不过另外一…

量子飞跃:从根本上改变复杂问题的解决方式

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 利用多功能量子比特的量子计算机已处于解决复杂优化问题的最前沿&#xff0c;例如旅行商问题&#xff0c;这是一个典型的…

Python实现时间序列ARIMA模型(附带超详细理论知识和完整代码实现)

文章目录 0 结果1 介绍2 建模2.1 预备知识2.1.1 ADF检验结果&#xff08;单位根检验统计量&#xff09;2.1.2 差分序列的白噪声检验&#xff08;这里使用Ljung-Box检验&#xff09;2.1.3 ARIMA模型&#xff08;差分整合移动平均自回归模型&#xff09;的三个参数:p&#xff0c;…

探索分布式技术--------------注册中心zookeeper

目录 一、ZooKeeper是什么 二、ZooKeeper的工作机制 三、ZooKeeper特点 四、ZooKeeper数据结构 五、ZooKeeper应用场景 5.1统一命名服务 5.2统一配置管理 5.3统一集群管理 5.4服务器动态上下线 5.5软负载均衡 六、ZooKeeper的选举机制 6.1第一次启动选举机制 6.2非…

家居网购项目(Ajax验证用户名+上传图片)

文章目录 1.Ajax验证用户名1.程序框架图2.修改MemberServlet3.修改login.jsp4.结果展示 2.Ajax判断验证码是否输入正确1.修改MemberServlet2.修改login.jsp3.结果展示 3.Ajax添加购物车1.程序框架图2.修改CartServlet2.修改index.jsp3.解决问题—未登录直接添加购物车&#xff…

Excel文件解析

在此模块的学习中&#xff0c;我们需要一个新的开源类库---Apahche POI开源类库。这个类库的用途是&#xff1a;解析并生成Excel文件(Word、ppt)。Apahche POI基于DOM方式进行解析&#xff0c;将文件直接加载到内存&#xff0c;所以速度比较快&#xff0c;适合Excel文件数据量不…