首页 > 编程语言 >C++ Qt开发:CheckBox多选框组件

C++ Qt开发:CheckBox多选框组件

时间:2023-12-13 16:34:38浏览次数:33  
标签:CheckBox Qt setChecked C++ state checkBox 选中 ui

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将会联动,如下图所示;

标签:CheckBox,Qt,setChecked,C++,state,checkBox,选中,ui
From: https://www.cnblogs.com/LyShark/p/17896591.html

相关文章

  • C++类的静态成员
    C++类的静态成员声明并使用静态成员使用static关键字将其与类关联在一块,同样,static声明的对象也可以声明访问权限public,private注意,类的静态成员存在于任何对象之外,对象中不包含任何与静态数据有关的数据,就是说类中声明的静态成员是独立于类而存在的,只是和类相关联(这里的独立并不......
  • C++堆——heap与二叉树和python
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • C++ Templates 第2版 电子书 pdf
    关注公众号:红宸笑。回复:电子书即可  本书是同名经典畅销图书的全新升级版本,针对C++11、C++14、C++17标准进行了全面更新,并对所有的新语言特性(包括可变参数模板、通用lambda、类模板参数推导等)进行了解释。全书共28章。首先全面介绍了本书的内容结构和相关情况。第1部分(......
  • Qt小知识2.Q_GLOBAL_STATIC
    1了解Q_GLOBAL_STATICQ_GLOBAL_STATIC是Qt中提供的一个宏,用于创建跨越多个文件的全局静态对象。其主要作用在于两点:懒惰初始化(Lazyinitialization):它确保全局静态对象只有在首次使用时才被创建,而不是在程序启动时立即创建,从而可以减少程序启动时的初始化开销。线程安全(......
  • C++基础 -5- 动态内存分配
    ———————动态内存分配——————— ......
  • C++ Qt开发:RadioButton单选框分组组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QRadioButton单选框组件以及与之交互的QButtonGroup类的常用方法及灵活运用。QRadioButton是Qt框......
  • iMX287A嵌入式Qt环境搭建
    原文:https://zhuanlan.zhihu.com/p/111021921?utm_id=01.嵌入式Qt简介Qt是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只需要编写一套代码,然后把这套代码放在不同平台的Qt环境去编译,就会生成可以运行在对应平台的应用程序。例如,我在Windows写了一个串口助手,这套代......
  • ubuntu安装qt4.8.6
    转载(https://blog.csdn.net/qq_26849933/article/details/127115646)文章目录前言一、查看GCC版本二、QT4库安装下载降低GCC编译器版本前期介绍具体实施QT4详细安装步骤参考链接前言ubuntu18.04及以后的版本(20.04,22.04)在编译QT4库的时候会报错,无......
  • C++类中的友元
    声明关键字template<classT>friendTT_Name//这里的T表示声明的类型,T_Name表示类型名称友元声明的作用在一个类中,如果某个成员被private修饰而封装起来,对于外部的函数是无法访问到该成员信息的但如果对外部访问函数进行友元修饰,函数就可以对类中的封装成员进行访问#include<ios......
  • c++ 多线程
    https://blog.csdn.net/sjc_0910/article/details/118861539unique_lock和lock_guard多线程是一种实现并发处理的有效方式,C++11开始引入了<thread>库,使得多线程编程更加容易和高效。以下是C++中多线程编程的一些主要内容:线程的创建:在C++中,可以使用std::thread类来创建一......