C++ Qt开发之CheckBox多选框组件的用法详解

 更新时间:2023年12月14日 09:38:02   作者:微软技术分享  
Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在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多选框组件的用法详解的详细内容,更多关于C++ Qt CheckBox组件的资料请关注脚本之家其它相关文章!

相关文章

  • 用C语言实现猜数字

    用C语言实现猜数字

    这篇文章主要为大家详细介绍了用C语言实现猜数字,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • c++访问私有private成员变量的常用方法

    c++访问私有private成员变量的常用方法

    这篇文章主要介绍了c++访问私有private成员变量的常用方法,需要的朋友可以参考下
    2020-08-08
  • C语言指针入门学习面面观

    C语言指针入门学习面面观

    这篇文章主要介绍了C语言指针的一些基础知识,指针可以说是C语言入门学习中的头等大事,文中从数组和函数等多方面剖析C中指针的作用,需要的朋友可以参考下
    2016-02-02
  • Unity3D实现经典小游戏Pacman

    Unity3D实现经典小游戏Pacman

    这篇文章主要介绍了基于Unity3D制作一做个经典小游戏Pacman,文中的示例代码讲解详细,对我们学习Unity3D有一定的帮助,感兴趣的小伙伴可以了解一下
    2021-12-12
  • C++小练习之高性能实现字符串分割

    C++小练习之高性能实现字符串分割

    字符串分割是日常工作中比较常见的基础函数,通常大家会使用现成的基础库,基础库的性能是否是最佳的,本文主要和大家探讨一下如何最大限度的提升字符串分割的性能,希望对大家有所帮助
    2023-10-10
  • 通过代码实例解析c++ vector常用方法

    通过代码实例解析c++ vector常用方法

    这篇文章主要介绍了通过代码实例解析c++ vector常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • C语言编程动态内存开辟实现升级版通讯录教程示例

    C语言编程动态内存开辟实现升级版通讯录教程示例

    这篇文章主要为大家介绍了C语言编程实现动态内存开辟升级版通讯录的教程示例及解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 基于C语言实现学生管理系统

    基于C语言实现学生管理系统

    这篇文章主要为大家详细介绍了基于C语言实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++中的Reactor原理与实现

    C++中的Reactor原理与实现

    reactor设计模式是event-driven architecture的一种实现方式,处理多个客户端并发的向服务端请求服务的场景,每种服务在服务端可能由多个方法组成,这篇文章主要介绍了Reactor原理与实现,需要的朋友可以参考下
    2022-07-07
  • C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论