运维.售后
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
博客
Blog
ToB门户
了解全球最新的ToB事件
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
C++ Qt开发:CheckBox多选框组件
C++ Qt开发:CheckBox多选框组件
西河刘卡车医
金牌会员
|
2024-2-17 06:54:22
|
显示全部楼层
|
阅读模式
楼主
主题
932
|
帖子
932
|
积分
2796
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:
artiallyChecked 或 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:
artiallyChecked 或 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:
artiallyChecked代表半选中、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将会联动,如下图所示;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
西河刘卡车医
金牌会员
这个人很懒什么都没写!
楼主热帖
轻量级CI/CD发布部署环境搭建及使用_06 ...
【容器~原始真解】Docker —— 容器的 ...
PHP判断远程文件是否存在的四种方法 ...
超融合一体机上新,打通信创落地的“顶 ...
一文了解华为FusionInsight MRS HBase ...
Spring--循环依赖的原理(四)--为什么用 ...
工行、建行、农行的 IT 架构是什么样的 ...
继承和多重继承
全双工与半双工技术剖析
MySQL高可用架构搭建实战
标签云
存储
服务器
快速回复
返回顶部
返回列表