ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++ Qt开发:CheckBox多选框组件 [打印本页]

作者: 西河刘卡车医    时间: 2024-2-17 06:54
标题: 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: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()将前三个选择框设置为可选择状态,代码如下所示;
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
  4. {
  5.     ui->setupUi(this);
  6.     // 启用三态状态并设置为可选择
  7.     ui->checkBox_a->setTristate();
  8.     ui->checkBox_b->setTristate();
  9.     ui->checkBox_c->setTristate();
  10.     // 设置为可选状态
  11.     ui->checkBox_a->setEnabled(true);
  12.     ui->checkBox_b->setEnabled(true);
  13.     ui->checkBox_c->setEnabled(true);
  14. }
  15. MainWindow::~MainWindow()
  16. {
  17.     delete ui;
  18. }
复制代码
接着我们分别为三个选择框配置选择事件,通过在半选框中右键选中stateChanged(int)点击确定跳转到选择框的事件中来,在事件中int state参数则代表选择框传回的状态码,通过判断状态码Qt::Checked则代表选中、Qt:artiallyChecked代表半选中、Qt::Unchecked代表未选中。
  1. // 设置第一个选择框
  2. void MainWindow::on_checkBox_a_stateChanged(int state)
  3. {
  4.     // 选中状态
  5.     if (state == Qt::Checked)
  6.     {
  7.        ui->checkBox_a->setText("选中");
  8.     }
  9.     // 半选状态
  10.     else if(state == Qt::PartiallyChecked)
  11.     {
  12.        ui->checkBox_a->setText("半选中");
  13.     }
  14.     // 未选中
  15.     else if(state == Qt::Unchecked)
  16.     {
  17.        ui->checkBox_a->setText("未选中");
  18.     }
  19.     // 否则恢复默认值
  20.     else
  21.     {
  22.         ui->checkBox_a->setText("半选框1");
  23.     }
  24. }
  25. // 设置第二个选择框
  26. void MainWindow::on_checkBox_b_stateChanged(int state)
  27. {
  28.     // 选中状态
  29.     if (state == Qt::Checked)
  30.     {
  31.        ui->checkBox_b->setText("选中");
  32.     }
  33.     // 半选状态
  34.     else if(state == Qt::PartiallyChecked)
  35.     {
  36.        ui->checkBox_b->setText("半选中");
  37.     }
  38.     // 未选中
  39.     else if(state == Qt::Unchecked)
  40.     {
  41.        ui->checkBox_b->setText("未选中");
  42.     }
  43.     // 否则恢复默认值
  44.     else
  45.     {
  46.         ui->checkBox_b->setText("半选框2");
  47.     }
  48. }
  49. // 设置第三个选择框
  50. void MainWindow::on_checkBox_c_stateChanged(int state)
  51. {
  52.     // 选中状态
  53.     if (state == Qt::Checked)
  54.     {
  55.        ui->checkBox_c->setText("选中");
  56.     }
  57.     // 半选状态
  58.     else if(state == Qt::PartiallyChecked)
  59.     {
  60.        ui->checkBox_c->setText("半选中");
  61.     }
  62.     // 未选中
  63.     else if(state == Qt::Unchecked)
  64.     {
  65.        ui->checkBox_c->setText("未选中");
  66.     }
  67.     // 否则恢复默认值
  68.     else
  69.     {
  70.         ui->checkBox_c->setText("半选框3");
  71.     }
  72. }
复制代码
至此,当选择不同的选择框时则可以切换到不同的选择状态,如下图;

接着来说说如何实现清除选择框的状态,当用户点击清除状态时,首先我们要做的就是调用isChecked()来检查每一个选择框是否被选中,如果是则通过setChecked()将属性设置为false即可,通过这种方式也可以实现对特定选择框状态的父子关联,代码如下所示;
  1. // 清除选中状态
  2. void MainWindow::on_pushButton_clicked()
  3. {
  4.     // 获取选择框状态
  5.     int checka = ui->checkBox_a->isChecked();
  6.     int checkb = ui->checkBox_b->isChecked();
  7.     int checkc = ui->checkBox_c->isChecked();
  8.     // 依次重置
  9.     if(checka == true)
  10.     {
  11.         ui->checkBox_a->setChecked(false);
  12.     }
  13.     if(checkb == true)
  14.     {
  15.         ui->checkBox_b->setChecked(false);
  16.     }
  17.     if(checkc == true)
  18.     {
  19.         ui->checkBox_c->setChecked(false);
  20.     }
  21. }
  22. // 设置选中全部子框
  23. void MainWindow::on_checkBox_d_stateChanged(int state)
  24. {
  25.     // 选中所有子框
  26.     if(state == Qt::Checked)
  27.     {
  28.         ui->checkBox_e->setChecked(true);
  29.         ui->checkBox_f->setChecked(true);
  30.         ui->checkBox_g->setChecked(true);
  31.         ui->checkBox_g->setChecked(true);
  32.         ui->checkBox_h->setChecked(true);
  33.     }
  34.     // 取消子框全选状态
  35.     if(state == Qt::Unchecked)
  36.     {
  37.         ui->checkBox_e->setChecked(false);
  38.         ui->checkBox_f->setChecked(false);
  39.         ui->checkBox_g->setChecked(false);
  40.         ui->checkBox_g->setChecked(false);
  41.         ui->checkBox_h->setChecked(false);
  42.     }
  43. }
复制代码
当读者选择选中全部子框按钮时,则底部的四个CheckBox将会联动,如下图所示;


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4