QCheckBox

QCheckBox是Qt中的复选框按钮, 可以单独使用, 也可以以组的方式使用(同一组可以同时选中多个), 当复选按钮被选中, 再次点击之后可以取消选中状态, 这一点和单选按钮是不同的。

API

// 构造函数
/*
参数:
    - text: 按钮上显示的文本信息
    - parent: 按钮的父对象
*/
QCheckBox::QCheckBox(const QString &text, QWidget *parent = nullptr);
QCheckBox::QCheckBox(QWidget *parent = nullptr);

// 判断当前复选框是否为三态复选框, 默认情况下为两种状态: 未选中, 选中
bool isTristate() const;
// 设置当前复选框为三态复选框: 未选中, 选中, 半选中
void setTristate(bool y = true);

/*
参数 state, 枚举类型 Qt::CheckState:
    - Qt::Unchecked	      --> 当前复选框没有被选中
    - Qt::PartiallyChecked    --> 当前复选框处于半选中状态, 部分被选中(三态复选框)
    - Qt::Checked	      --> 当前复选框处于选中状态
*/
// 设置复选框按钮的状态
void QCheckBox::setCheckState(Qt::CheckState state);
// 获取当前复选框的状态
Qt::CheckState QCheckBox::checkState() const;




//信号
// 当复选框的状态改变时,即当用户选中或取消选中复选框时,他的信号就会发出。
// 参数 state 表示的是复选框的三种状态中某一种, 可参考 Qt::CheckState
[signal] void QCheckBox::stateChanged(int state);

在这里插入图片描述
在这里插入图片描述

使用方法

setCheckState使用

在这里插入图片描述

#include "myqcheckbox.h"
#include "ui_myqcheckbox.h"

myQCheckBox::myQCheckBox(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::myQCheckBox)
{
    ui->setupUi(this);

//    Qt::Unchecked      0    The item is unchecked.
//    Qt::PartiallyChecked   1    The item is partially checked. Items in hierarchical models may be partially checked if some, but not all, of their children are checked.
//    Qt::Checked        2       The item is checked.


    ui->checkBox->setCheckState(Qt::PartiallyChecked);
}

myQCheckBox::~myQCheckBox()
{
    delete ui;
}

在这里插入图片描述

ui->checkBox->setCheckState(Qt::Checked);

在这里插入图片描述

void setTristate(bool y = true)

// 设置当前复选框为三态复选框: 未选中, 选中, 半选中

在这里插入图片描述

cpp文件

#include "myqcheckbox.h"
#include "ui_myqcheckbox.h"
#include "QDebug"

myQCheckBox::myQCheckBox(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::myQCheckBox)
{
    ui->setupUi(this);

//    Qt::Unchecked      0    The item is unchecked.
//    Qt::PartiallyChecked   1    The item is partially checked. Items in hierarchical models may be partially checked if some, but not all, of their children are checked.
//    Qt::Checked        2       The item is checked.


    ui->checkBox->setCheckState(Qt::Checked);


    //设置复选框可以三态显示
    ui->apple->setTristate(true);
    ui->banana->setTristate(true);
    ui->li->setTristate(true);
    ui->tao->setTristate(true);
}

myQCheckBox::~myQCheckBox()
{
    delete ui;
}



void myQCheckBox::on_apple_stateChanged(int arg1)
{
    if(arg1==Qt::Unchecked){
        qDebug()<<"没有选择苹果";
    }else if(arg1==Qt::PartiallyChecked){
        qDebug()<<"部分选择苹果";
    }else if(arg1==Qt::Checked){
        qDebug()<<"全部选择苹果";
    }
}

void myQCheckBox::on_banana_stateChanged(int arg1)
{
    if(arg1==Qt::Unchecked){
        qDebug()<<"没有选择香蕉";
    }else if(arg1==Qt::PartiallyChecked){
        qDebug()<<"部分选择香蕉";
    }else if(arg1==Qt::Checked){
        qDebug()<<"全部选择香蕉";
    }
}

void myQCheckBox::on_li_stateChanged(int arg1)
{
    if(arg1==Qt::Unchecked){
        qDebug()<<"没有选择梨子";
    }else if(arg1==Qt::PartiallyChecked){
        qDebug()<<"部分选择梨子";
    }else if(arg1==Qt::Checked){
        qDebug()<<"全部选择梨子";
    }
}

void myQCheckBox::on_tao_stateChanged(int arg1)
{
    if(arg1==Qt::Unchecked){
        qDebug()<<"没有选择桃子";
    }else if(arg1==Qt::PartiallyChecked){
        qDebug()<<"部分选择桃子";
    }else if(arg1==Qt::Checked){
        qDebug()<<"全部选择桃子";
    }
}

头文件

#ifndef MYQCHECKBOX_H
#define MYQCHECKBOX_H

#include <QDialog>

namespace Ui {
class myQCheckBox;
}

class myQCheckBox : public QDialog
{
    Q_OBJECT

public:
    explicit myQCheckBox(QWidget *parent = nullptr);
    ~myQCheckBox();

private slots:


    void on_apple_stateChanged(int arg1);

    void on_banana_stateChanged(int arg1);

    void on_li_stateChanged(int arg1);

    void on_tao_stateChanged(int arg1);

private:
    Ui::myQCheckBox *ui;
};

#endif // MYQCHECKBOX_H

效果
在这里插入图片描述
在这里插入图片描述

三态设置和使用

一步搭建一个有树状关系的界面:

在这里插入图片描述
在这里插入图片描述

第二步, 在窗口类的头文件中添加槽函数, 槽函数处理复选框按钮的状态变化:

#ifndef MYQCHECKBOX2_H
#define MYQCHECKBOX2_H

#include <QDialog>

namespace Ui {
class myqcheckbox2;
}

class myqcheckbox2 : public QDialog
{
    Q_OBJECT

public:
    explicit myqcheckbox2(QWidget *parent = nullptr);
    ~myqcheckbox2();

private slots:
    // 添加槽函数, 处理复选框按钮状态变化
    void statusChanged(int state);

private:
    Ui::myqcheckbox2 *ui;
    int m_number = 0;    // 添加一个计数器, 记录有几个子节点被选中了(目的是设置父节点的状态)
};

#endif // MYQCHECKBOX2_H

第三步, 在源文件中添加处理逻辑

注意:槽函数statusChanged写的是子节点的处理逻辑
匿名函数 connect(ui->fruit, &QCheckBox::clicked, this, [=](bool bl)写的是根节点的处理逻辑

#include "myqcheckbox2.h"
#include "ui_myqcheckbox2.h"
#include "QDebug"

myqcheckbox2::myqcheckbox2(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::myqcheckbox2)
{
    ui->setupUi(this);

    // 处理子节点的状态变化, 对应的槽函数相同
    connect(ui->apple, &QCheckBox::stateChanged, this, &myqcheckbox2::statusChanged);
    connect(ui->banana, &QCheckBox::stateChanged, this, &myqcheckbox2::statusChanged);
    connect(ui->li, &QCheckBox::stateChanged, this, &myqcheckbox2::statusChanged);
    connect(ui->tao, &QCheckBox::stateChanged, this, &myqcheckbox2::statusChanged);


    //添加处理根节点的状态变化
    connect(ui->fruit, &QCheckBox::clicked, this, [=](bool bl)
    {
        if(bl)
        {
            // 子节点全部设置为选中状态
            ui->apple->setChecked(true);
            ui->banana->setChecked(true);
            ui->li->setChecked(true);
            ui->tao->setChecked(true);
        }
        else
        {
            // 子节点全部设置为非选中状态
            ui->apple->setChecked(false);
            ui->banana->setChecked(false);
            ui->li->setChecked(false);
            ui->tao->setChecked(false);
        }
    });

}

myqcheckbox2::~myqcheckbox2()
{
    delete ui;
}


//槽函数(处理子节点的点击状态)
void myqcheckbox2::statusChanged(int state)
{
    //qDebug()<<"点击了一下"<<state;
    if(state==Qt::Checked){
        m_number++;
    }else{
        m_number--;
    }

    // 根据计数器值判断根节点是否需要做状态的更新
    if(m_number==4){
        ui->fruit->setCheckState(Qt::Checked);
    }else if(m_number==0){
        ui->fruit->setCheckState(Qt::Unchecked);
    }else{
        ui->fruit->setCheckState(Qt::PartiallyChecked);
    }
}

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值