C++ Qt开发:CheckBox多选框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍CheckBox单行输入框组件的常用方法及灵活运用。
QCheckBox 是 Qt 中用于实现复选框的组件,它提供了丰富的功能和灵活性。与之前文章中的RadioButton组件不同,CheckBox组件支持多项选择以及三态支持,即可以是选中、未选中或半选中的状态。
下面是QCheckBox的主要方法的概述和表格形式:
| 方法名 | 描述 |
|---|---|
QCheckBox(QWidget *parent = nullptr) |
构造函数,创建一个 QCheckBox 组件。 |
isChecked() const |
返回复选框的当前状态,选中返回 true,否则返回 false。 |
setCheckState(Qt::CheckState state) |
设置复选框的状态,可以是 Qt::Unchecked、Qt::PartiallyChecked 或 Qt::Checked。 |
checkState() const |
返回复选框的当前状态,枚举类型 Qt::CheckState。 |
setTristate(bool) |
启用或禁用三态复选框的功能。 |
isTristate() const |
返回是否启用了三态复选框的功能。 |
setCheckable(bool checkable) |
设置复选框是否可以被选中,true 表示可以选中,false 表示不能选中。 |
isChecked() const |
返回复选框的当前状态,选中返回 true,否则返回 false。 |
setChecked(bool check) |
设置复选框的状态,true 表示选中,false 表示未选中。 |
text() const |
返回复选框的文本标签。 |
setText(const QString &text) |
设置复选框的文本标签。 |
stateChanged(int) |
复选框状态变化时发射的信号,参数是枚举类型 Qt::CheckState,可以是 Qt::Unchecked、Qt::PartiallyChecked 或 Qt::Checked。 |
这里分别演示一下选择框组件的使用方法,首先展示如何设置三态选择框,然后再展示一下如何通过一个选择框控制子选择框的状态,如下图是该程序的布局。

首先在主构造函数MainWindow中通过使用setTristate()将前三个半选框设置为三态状态,并使用setEnabled()将前三个选择框设置为可选择状态,代码如下所示;
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 启用三态状态并设置为可选择
ui->checkBox_a->setTristate();
ui->checkBox_b->setTristate();
ui->checkBox_c->setTristate();
// 设置为可选状态
ui->checkBox_a->setEnabled(true);
ui->checkBox_b->setEnabled(true);
ui->checkBox_c->setEnabled(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
接着我们分别为三个选择框配置选择事件,通过在半选框中右键选中stateChanged(int)点击确定跳转到选择框的事件中来,在事件中int state参数则代表选择框传回的状态码,通过判断状态码Qt::Checked则代表选中、Qt::PartiallyChecked代表半选中、Qt::Unchecked代表未选中。
// 设置第一个选择框
void MainWindow::on_checkBox_a_stateChanged(int state)
{
// 选中状态
if (state == Qt::Checked)
{
ui->checkBox_a->setText("选中");
}
// 半选状态
else if(state == Qt::PartiallyChecked)
{
ui->checkBox_a->setText("半选中");
}
// 未选中
else if(state == Qt::Unchecked)
{
ui->checkBox_a->setText("未选中");
}
// 否则恢复默认值
else
{
ui->checkBox_a->setText("半选框1");
}
}
// 设置第二个选择框
void MainWindow::on_checkBox_b_stateChanged(int state)
{
// 选中状态
if (state == Qt::Checked)
{
ui->checkBox_b->setText("选中");
}
// 半选状态
else if(state == Qt::PartiallyChecked)
{
ui->checkBox_b->setText("半选中");
}
// 未选中
else if(state == Qt::Unchecked)
{
ui->checkBox_b->setText("未选中");
}
// 否则恢复默认值
else
{
ui->checkBox_b->setText("半选框2");
}
}
// 设置第三个选择框
void MainWindow::on_checkBox_c_stateChanged(int state)
{
// 选中状态
if (state == Qt::Checked)
{
ui->checkBox_c->setText("选中");
}
// 半选状态
else if(state == Qt::PartiallyChecked)
{
ui->checkBox_c->setText("半选中");
}
// 未选中
else if(state == Qt::Unchecked)
{
ui->checkBox_c->setText("未选中");
}
// 否则恢复默认值
else
{
ui->checkBox_c->setText("半选框3");
}
}
至此,当选择不同的选择框时则可以切换到不同的选择状态,如下图;

接着来说说如何实现清除选择框的状态,当用户点击清除状态时,首先我们要做的就是调用isChecked()来检查每一个选择框是否被选中,如果是则通过setChecked()将属性设置为false即可,通过这种方式也可以实现对特定选择框状态的父子关联,代码如下所示;
// 清除选中状态
void MainWindow::on_pushButton_clicked()
{
// 获取选择框状态
int checka = ui->checkBox_a->isChecked();
int checkb = ui->checkBox_b->isChecked();
int checkc = ui->checkBox_c->isChecked();
// 依次重置
if(checka == true)
{
ui->checkBox_a->setChecked(false);
}
if(checkb == true)
{
ui->checkBox_b->setChecked(false);
}
if(checkc == true)
{
ui->checkBox_c->setChecked(false);
}
}
// 设置选中全部子框
void MainWindow::on_checkBox_d_stateChanged(int state)
{
// 选中所有子框
if(state == Qt::Checked)
{
ui->checkBox_e->setChecked(true);
ui->checkBox_f->setChecked(true);
ui->checkBox_g->setChecked(true);
ui->checkBox_g->setChecked(true);
ui->checkBox_h->setChecked(true);
}
// 取消子框全选状态
if(state == Qt::Unchecked)
{
ui->checkBox_e->setChecked(false);
ui->checkBox_f->setChecked(false);
ui->checkBox_g->setChecked(false);
ui->checkBox_g->setChecked(false);
ui->checkBox_h->setChecked(false);
}
}
当读者选择选中全部子框按钮时,则底部的四个CheckBox将会联动,如下图所示;

C++ Qt开发:CheckBox多选框组件的更多相关文章
- flutter Checkbox 复选框组件
import 'package:flutter/material.dart'; class CheckboxDemo extends StatefulWidget { @override _Check ...
- 如何让checkbox复选框只能单选
function框架div 如何让checkbox复选框只能单选 在项目开发中遇到一个这样的问题,要让一列复选框架在任何时间段内只能选择一个. 有人说怎么不用单选框了,因为单选框一旦选择了就不能取消选 ...
- 关于Unity中NGUI的Checkbox复选框、Slider滑动条和Button的6种触发回调事件的方式
Checkbox复选框 1.创建一个NGUI背景Sprite1节点 2.打开NGUI---->Open---->Prefab Toolbar---->选择一个复选框节点,拖拽到背景节 ...
- checkbox复选框的一些深入研究与理解
一.一开始的唠叨最近忙于开发,自淫于项目的一步步完工,心浮躁了.舍近而求远,兵家之大忌.我是不是应该着眼于眼前的东西,好好的静下心来,超过一般人的沉静与沉浸,研究最基本的东西呢?这番思考,让我找到了一 ...
- 【转载】checkbox复选框的一些深入研究与理解
转载来自:原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] 一.一开始的唠叨最近忙于开发,自淫于项目的一步步完工,心浮躁了.舍近而求远,兵家之大忌. ...
- 通过编写串口助手工具学习MFC过程——(五)添加CheckBox复选框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- Flutter学习(8)——CheckBox多选框使用及动态更改多选框数据
原文地址:Flutter学习(8)--CheckBox多选框使用及动态更改多选框数据 | Stars-One的杂货小窝 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同 ...
- jsp获取多选框组件的值
jsp获取多选框组件的值 1.首先写一个带有多选框的前台页 1 <%@ page language="java" contentType="text/html; c ...
- 在element plus中使用checkbox 多选框实现大区省市区选择回选
1.产品拿来淘宝后台页面,希望我们的快递发货也用这一套 长这样: 2.后端说提供的数据是树形结构,大区id不要传,传省的id,勾选哪个传哪个 3.element ui的树形插件和级联选择器在数据上是 ...
- php获取checkbox复选框的内容
php获取checkbox复选框的内容 由于checkbox属性,所有必须把checkbox复选择框的名字设置为一个如果checkbox[],php才能读取,以数据形式,否则不能正确的读取chec ...
随机推荐
- 深入理解MySQL:数据类型、查询优化、索引、事务处理和数据备份与恢复
摘要: MySQL 是一种常用的关系型数据库管理系统,对于开发者和数据库管理员来说,掌握 MySQL 的关键概念和最佳实践非常重要.本文将围绕 MySQL 的数据类型.查询优化.索引.事务处理以及数据 ...
- QA|Pycharm:allure : 无法将“allure”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。|Allure
Pycharm中生成allure测试报告时报错如图: 单独执行allure --version也不行,cmd这样执行也报同样的错 网上查了 说是环境变量问题,加一下cmd可以了,重启pycharm也可 ...
- .NET中测量多线程基准性能
多线程基准性能是用来衡量计算机系统或应用程序在多线程环境下的执行能力和性能的度量指标.它通常用来评估系统在并行处理任务时的效率和性能.测量中通常创建多个线程并在这些线程上执行并发任务,以模拟实际应用程 ...
- 钉钉旧版服务端SDK支持异步方法的升级改造
最近项目中需要对接钉钉,有些钉钉 API 的访问需要使用旧版服务端 SDK 才能搞定,但是这个 SDK 使用的还是 .NET Framework 2.0 框架,不能跨平台部署,也不支持 async\a ...
- 关于Unity 如何与Blazor Server结合
关于Unity 如何与Blazor Server结合 一.介绍 最近工作中有`Unity`与`Blazor Server`结合的需求,在网上找了一圈,发现这方面的资料比较少,特此写下这篇记录一下自己的 ...
- 工作中常用的一些Git骚操作,一般人我不告诉他。
一.Git提交代码 1 git pull 从服务器上拉取代码 2 git status 查看文件的状态 3 git add . 添加所有文件到暂存区 4 git commit -m "提交的 ...
- TCP协议的秘密武器:流量控制与拥塞控制
TCP可靠性传输 相信大家都熟知TCP协议作为一种可靠传输协议,但它是如何确保传输的可靠性呢? 要实现可靠性传输,需要考虑许多因素,比如数据的损坏.丢失.重复以及分片顺序混乱等问题.如果不能解决这些问 ...
- MySQL实战实战系列 04 深入浅出索引(下)
在上一篇文章中,我和你介绍了 InnoDB 索引的数据结构模型,今天我们再继续聊聊跟 MySQL 索引有关的概念. 在开始这篇文章之前,我们先来看一下这个问题: 在下面这个表 T 中,如果我执行 se ...
- 解决WordPress修改固定链接结构后出现“404 Not Found”的情况
解决办法 在宝塔面板找到部署的站点设置 点击进入配置文件,复制下方这段代码粘贴进入配置文件,操作完这步,去刷新下我们的网站,再打开文章链接就可以正常打开.访问了. location / { try_f ...
- oracle的根容器下新建pdb容器及本地用户
在Oracle12C根容器下,新建pdb,要求根据种子pdb建目的pdb:db_test,配置监听:在目的pdb下建本地用户 首先根据种子pdb新建目的pdb 1.管理员身份登录 C:\WINDOWS ...