Qt QCheckBox复选按钮控件

文章目录

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

  • Qt中的复选按钮类是QCheckBox
  • 它和单选按钮很相似,单选按钮常用在“多选一”的场景,而复选按钮常用在"多选多"的场景
  • 比如喜欢的水果选项中,可以在“苹果/桃/梨/橘子/香蕉”中选择多个。

1 属性和方法

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

1.1 文本

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

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

1.2 三态

单选按钮,有选中(Checked)和非选中(UnChecked)这两种状态。

而复选按钮可以有三种状态:

  • Qt::Checked 选中
  • Qt::Unchecked 非选中
  • Qt::PartiallyChecked 半选中,比如当一组复选按钮中只选择了部分时,可以设置其父项为半选状态,如下

在这里插入图片描述

可以设置复选按钮,是否支持三态,如下:

// 用于获取和设置是否支持三态
bool inTristate() const;
void setTristate(bool y = true); 

如果不支持三态,使用方法单选按钮一样,只有选中(Checked)和非选中(unchecked)两种状态,没有半选中状态(PartiallyChecked)

此时可以使用如下获取复选按钮是否选中:

// 获取和设置复选按钮是否选中: checked / unchecked
bool isChecked() const;
void setChecked(bool);

如果支持三态,除了选中(Checked)和非选中(unchecked)两种状态,还有半选中状态(PartiallyChecked)此时可以使用如下获取复选按钮的状态:

// 设置和获取复选按钮的状态
Qt::CheckState checkState() const;
void setCheckState(Qt::CheckState state);

1.3 自动排他

复选按钮同样可以设置是否自动排他,入下:

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

我们前面说过,复选按钮实现的是“多选多",因此复选按钮的该属性默认是禁能的

在这里插入图片描述

尽管在技术上可以通过复选框来实现单选框的行为,也可以通过单选框来实现复选框的行为,但还是强烈建议使用众所周知的约定。

1.4 信号和槽

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

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

// 当复选按钮的选中状态发生改变时,会发射该信号
// 所谓状态改变,是指在 Checked / UnChecked / PartiallyChecked 之间状态改变
void stateChanged(int state);

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

    // stateChanged按钮状态发生改变,就发射信号
    connect(ui->cbApple, &QCheckBox::stateChanged, this,
            &Widget::onStateChanged);
    connect(ui->cbBanana, &QCheckBox::stateChanged, this,
            &Widget::onStateChanged);
    connect(ui->cbOrange, &QCheckBox::stateChanged, this,
            &Widget::onStateChanged);
    connect(ui->cbPeach, &QCheckBox::stateChanged, this,
            &Widget::onStateChanged);
    connect(ui->cbPear, &QCheckBox::stateChanged, this,
            &Widget::onStateChanged);
}

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

void Widget::onStateChanged() {
    QString s;
    // 获取是否选择状态 选中返回true 未选择返回false
    bool appleChecked = ui->cbApple->isChecked();
    bool bananaChecked = ui->cbBanana->isChecked();
    bool orangeChecked = ui->cbOrange->isChecked();
    bool peachChecked = ui->cbPeach->isChecked();
    bool pearChecked = ui->cbPear->isChecked();

    // 实现cbAll功能
    if (appleChecked && bananaChecked && orangeChecked && peachChecked &&
        pearChecked) {
        // 全部选中
        ui->cbAll->setCheckState(Qt::Checked);
    } else if (!(appleChecked || bananaChecked || orangeChecked ||
                 peachChecked || pearChecked)) {
        // 全部未选中
        ui->cbAll->setCheckState(Qt::Unchecked);
    } else {
        // 部分选中
        ui->cbAll->setCheckState(Qt::PartiallyChecked);
    }

    // 实现文本框输出功能
    //选中状态就输出文字
    if (appleChecked) {
        s += ui->cbApple->text() += " ";
    }
    if (bananaChecked) {
        s += ui->cbBanana->text() += " ";
    }
    if (orangeChecked) {
        s += ui->cbOrange->text() += " ";
    }
    if (peachChecked) {
        s += ui->cbPeach->text() += " ";
    }
    if (pearChecked) {
        s += ui->cbPear->text() += " ";
    }
    ui->leResult->setText(s);
}

void Widget::on_cbAll_clicked() {
    // 手动点击时,不能出现半选状态
    // 设置不能是半选状态
    ui->cbAll->setTristate(false);

    // 获取cbAll状态
    int state = ui->cbAll->checkState();

    if (state == Qt::Checked) {
        // 全部选中
        ui->cbApple->setChecked(true);
        ui->cbBanana->setChecked(true);
        ui->cbOrange->setChecked(true);
        ui->cbPeach->setChecked(true);
        ui->cbPear->setChecked(true);
    } else if (state == Qt::Unchecked) {
        // 全部未选中
        ui->cbApple->setChecked(false);
        ui->cbBanana->setChecked(false);
        ui->cbOrange->setChecked(false);
        ui->cbPeach->setChecked(false);
        ui->cbPear->setChecked(false);
    }
}

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

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

相关文章

知识】分享几个摄像头的选型相关知识

【知识】分享几个摄像头的选型相关知识 目录 【知识】分享几个摄像头的选型相关知识一、前言二、正文1、先了解一下监控摄像头的种类1.1、云台型(云台型一体摄像机)1.2、枪机型(枪型摄像机)1.3、球机型(球型摄像机&…

LeetCode-字符串转换整数atoi(8)

题目描述: 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符&…

【MySQL】表设计与范式设计

文章目录 一、数据库表设计一对一一对多多对多 二、范式设计第一范式第二范式第三范式BC范式第四范式 一、数据库表设计 一对一 举个例子,比如这里有两张表,用户User表 和 身份信息Info表。 因为一个用户只能有一个身份信息,所以User表和In…

【数学建模】美赛备战笔记 01 美赛指南与竞赛全流程

美赛指南 整篇论文需要在25页内。 六道赛题特点: A、B题涉及到微分方程和物理概念较多,需要一定的专业知识; C题常常涉及到时间序列、机器学习; D题一般是运筹学/网络科学,图论、优化问题,涉及到的概念多…

Day3Qt

1. (1)完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 …

NAS使用的一些常见命令 ssh sftp 上传 下载 ALL in one

目录 登陆上传/下载内网穿透 登陆 ssh 登陆 ssh usernameserverIP -p portNumsftp 登陆 sftp -P portNum usernameserverIP上传/下载 如ls等,远程服务器操作 如lls等,本机操作,前缀为l 文件 put **** 将本机上文件上传到远程服务器上当…

使用Vivado Design Suite平台板、将IP目录与平台板流一起使用

使用Vivado Design Suite平台板流 Vivado设计套件允许您使用AMD目标设计平台板(TDP)创建项目,或者已经添加到板库的用户指定板。当您选择特定板,Vivado设计工具显示有关板的信息,并启用其他设计器作为IP定制的一部分以…

Keil编译生成的bin文件自动以版本号命名

Keil编译程序生成bin文件时,如何自动以版本号命名bin文件 一、目的二、方法三、实现过程一、目的二、方法三、实现过程1、脚本形式2、可执行文件形式 一、目的 二、方法 三、实现过程 一、目的 Keil编译程序时,生成的Hex/Bin文件名字是根据Keil中工程…

RK3568平台开发系列讲解(Linux系统篇)Linux 内核打印

🚀返回总目录 文章目录 一、方法一:dmseg 命令二、方法二:查看 kmsg 文件三、方法三:调整内核打印等级一、方法一:dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所示: 首先在串口终端使用 “dmseg”命令,可以看见相应的内核打印信息…

星耀新春,集星探宝,卡奥斯开源社区双节活动上线啦!

卡奥斯开源社区龙年新春专题活动上线啦! “星耀新春,集星探宝”,卡奥斯开源社区龙年新春专题活动重磅发布! 写文章、发项目、建应用、做测评,玩转盘、开宝箱 6大活动板块陪你玩儿转双节! 扫地机器人、家…

rax3000m 刷机 uboot + immortalwrt

0. 环境 - win10 ubuntu22 - rax3000m 生产日期20231027 一台(nand版本的) 1. 上电,登录web 电脑连接路由器LAN1 http://192.168.10.1/ 账号:user 密码:KK6kYC!3 上网设置:自动获取IP 2. 开启 ssh 2…

C++学习笔记——返回对象

一、返回对象 当我们说一个函数返回对象时,意味着该函数的返回值是一个对象。这种情况下,函数可以通过创建对象的副本、返回对象的引用或者返回对象的指针来实现。 返回对象的副本: 当一个函数返回对象的副本时,函数内部会创建一…

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢

前言 在一个微服务项目中,为了追求低耦合,会根据业务板块对主系统进行切分为一个个子模块,模块间相互隔离,但是这样子就会导致一个问题:对于一些在多个子模块中都适用的配置类、工具类、封装类等都需要拷贝冗余到各个模…

1月10号代码随想录左叶子之和

404.左叶子之和 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24示例 2: 输入: root [1]…

03.用于LLMs不同的任务-transformer 架构

大多数现代LLMs都依赖于 transformer 架构,这是 2017 年论文 Attention Is All You Need 中介绍的深度神经网络架构。要理解LLMs,我们必须简要回顾一下最初的转换器,它最初是为机器翻译而开发的,将英语文本翻译成德语和法语。变压器架构的简化版本如图 1.4 所示。 图 1.4 …

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 智慧高校学术报告系统…

使用numpy处理图片——滤镜

大纲 3维数组切分打平重组法深度切分法 3维数组堆叠 我们在用手机拍照片时,往往会对照片进行滤镜处理,从而让照片更加美观。本文我们将实现几种滤镜效果——去除所有像素中的某一种原色,形成只有红绿、红蓝和绿蓝原色的照片。 为了突出色彩丰…

鸿鹄电子招投标系统:企业战略布局下的采购寻源解决方案

在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块…

计算机组成原理20——控制单元的功能和实现2

本系列文章是学习了网课《哈尔滨工业大学–计算机组成原理》之后,用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点,如有不同意见,欢迎在评论区讨论。 目录 控制单元的外特性控制信号举例-多级时序系统控制方式 控…

关于jupyter突然打不开的问题

好久没有用python了,我的电脑环境是安装过anaconda和pycharm,但是有些简单的东西就希望在jupyter中测试一下,但是最近发现jupyter打不开了。 具体是: 在这里打开jupyter是可以的,但是在命令行就不行,表现为…