当前位置:   article > 正文

[Qt 教程之Widgets模块] —— QCheckBox复选框_qt复选框

qt复选框

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 <QDebug>

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 <QDebug>
#include <QButtonGroup>

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

打印结果如下:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/535500
推荐阅读
  

闽ICP备14008679号