• Qt 学习(四) —— QCheckBox复选框


    Qt系列教程总目录

    零、简介

    QCheckBox即复选框,常用作表单非互斥选择,,在“多选多”的场景中使用。

    office word和PhotoShop中都有使用复选框,如下:

    在这里插入图片描述

    在这里插入图片描述

    一、创建QCheckBox

    QCheckBox有两个构造函数,都要指定父对象,其中一个可以设置复选框的文本。

    QCheckBox(QWidget *parent = nullptr);
    QCheckBox(const QString &text, QWidget *parent = nullptr);
    
    • 1
    • 2

    同样可以通过拖动控件创建,也可以使用代码直接创建,控件创建默认使用构造函数QCheckBox(QWidget *parent = nullptr);

    如下图创建了三个单选按钮,其中,CheckBox通过拖拽控件创建,CheckBox1CheckBox2通过代码直接创建:

    在这里插入图片描述

    二、成员函数与信号

    QCheckBox除了继承于QAbstractButton的信号外,还有一个自己的信号void stateChanged(int);,当复选框状态改变,会发出该信号,并返回复选框的状态,其中复选框的状态有三种:

    ConstantValueDescription
    Qt::Unchecked0未被选中
    Qt::PartiallyChecked1部分被选中,即复选框有子项且子项未被全部选中
    Qt::Checked2被选中

    QCheckBox的成员函数除了继承于QAbstractButton外,还有两个比较常用,

    函数原型描述
    void setTristate(bool y = true);设置复选框是否可为三种状态,函数参数默认为true,但该属性默认为false
    bool isTristate() const;获取复选框是否可为三种状态
    void setCheckState(Qt::CheckState state);设置复选框状态
    Qt::CheckState checkState() const;获取复选框状态

    三、示例

    1. 设置复选框是否可为三种状态
    checkBox2->setTristate(true);
    
    • 1

    在这里插入图片描述

    如图,分别展示了CheckBox的三种状态。

    2. 设置复选框状态

    除了通过鼠标点击改变复选框状态,还可以通过代码设置:

    在这里插入图片描述

    其中复选框状态由枚举列出:

    enum CheckState {
        Unchecked,
        PartiallyChecked,
        Checked
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3. 通过复选框状态作相应操作
    #include "widget.h"
    #include "ui_widget.h"
    #include 
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        QCheckBox* checkBox1 = new QCheckBox("CheckBox1", this);
        checkBox1->setGeometry(QRect(130, 160, 111, 22));
    
        QCheckBox* checkBox2 = new QCheckBox("CheckBox2", this);
        checkBox2->setGeometry(QRect(130, 190, 111, 22));
        checkBox2->setTristate(true);
        checkBox2->setCheckState(Qt::CheckState::Checked);
    
        connect(checkBox2, SIGNAL(stateChanged(int)),
                this, SLOT(checkBox2CallBack(int)));
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::checkBox2CallBack(int state)
    {
        switch(state)
        {
        case Qt::CheckState::Checked:
            qDebug("checkBox2 is checked.");
            break;
        case Qt::CheckState::PartiallyChecked:
            qDebug("checkBox2 is partiallyChecked.");
            break;
        case Qt::CheckState::Unchecked:
            qDebug("checkBox2 is unchecked.");
            break;
        default:
            break;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    打印结果如下:

    在这里插入图片描述

    4. 通过多个复选框状态作相应操作

    这里可以借助按钮组(QButtonGroup),代码如下:

    #include "widget.h"
    #include "ui_widget.h"
    #include 
    #include 
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        QCheckBox* checkBox1 = new QCheckBox("CheckBox1", this);
        checkBox1->setGeometry(QRect(130, 160, 111, 22));
    
        QCheckBox* checkBox2 = new QCheckBox("CheckBox2", this);
        checkBox2->setGeometry(QRect(130, 190, 111, 22));
    
        m_btnGroup = new QButtonGroup(this);
        m_btnGroup->addButton(ui->checkBox, 0);
        m_btnGroup->addButton(checkBox1, 1);
        m_btnGroup->addButton(checkBox2, 2);
    
        connect(m_btnGroup, SIGNAL(idClicked(int)),
                this, SLOT(btnGroupCallBack(int)));
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::btnGroupCallBack(int btn)
    {
        if (m_btnGroup->button(btn)->isChecked())
        {
            switch(btn)
            {
            case 0:
                qDebug("checkBox0 is checked.");
                break;
            case 1:
                qDebug("checkBox1 is checked.");
                break;
            case 2:
                qDebug("checkBox2 is checked.");
                break;
            default:
                break;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    打印结果如下:

    在这里插入图片描述

  • 相关阅读:
    操作系统权限提升(二十七)之数据库提权-MySQL MOF提权
    系统安全与网络攻击
    2023国赛C题解题思路代码及图表:蔬菜类商品的自动定价与补货决策
    【Quark RISC-V】流水线CPU设计(5)控制冒险的处理
    P2672 [NOIP2015 普及组] 推销员 day15
    加密的手机号,如何模糊查询?
    B. Trouble Sort
    springboot+java大学生新生入学报到报道系统+jsp004
    数据结构与算法(持续更新)
    1、3快速格式代码
  • 原文地址:https://blog.csdn.net/maizousidemao/article/details/127703618