QT学习笔记5 复选控件QCheckBox使用方法和案例

介绍

QCheckBox在QT中被用作复选按钮,与单选按钮不同的是,单选按钮被用作“多选一”场景,复选按钮被用作“多选多”场景。
案例如下所示:
在这里插入图片描述

使用方法

文本

和前几篇一样,可以获取文本和设置文本,使用方法我就不过多介绍了

// 获取和设置显示的文本
QString text() const
void setText(const QString &text)

三态

复选按钮不同于单选按钮只有两种状态,复选按钮有三种状态:

  • Qt::Checked 选中 ——表示选项未选中,复选框未空心,使用其isChecked()函数的时候,返回false
  • Qt::Unchecked 非选中 ——表示选项选中,复选框未实心,使用其isChecked()函数的时候,返回true
    相关函数如下:
// 获取和设置复选按钮是否选中:checked/unchecked
bool isChecked() const
void setChecked(bool)

  • Qt::PartiallyChecked 半选中——这个状态是属于QCheckBox特有的状态,在某些场景非常有用,它表示选项状态不确定,既不是完全选中,又不是完全未选中,不过在软件页面还是非常常见的,如下图:
    在这里插入图片描述
    可以通过代码和属性栏来设置复选按钮是否支持三态:
// 用于获取和设置是否支持三态
bool isTristate() const
void setTristate(bool y = true)

除此之外,还可以通过代码获取当前复选按钮的状态,即选中、未选中、半选中。

// 设置和获取复选按钮的状态
Qt::CheckState checkState() const
void setCheckState(Qt::CheckState state)

自动排他

复选按钮可以设置是否自动排他,何为“自动排他”呢,选中一个,其他自动取消选中、
代码:

// 获取和设置自动排他
bool autoExclusive() const
void setAutoExclusive(bool)

也可以通过属性栏设置:
在这里插入图片描述

信号槽

复选按钮按下和抬起的过程中都会发送多个信号

// 单选按钮 QRadioButton 被点击时,会发出该信号
void clicked();

// 当复选按钮的选中状态发生改变时,会发射该信号
// 所谓状态改变,是指在 Checked/UnChecked/PartiallyChecked 之间状态改变
void stateChanged(int state)

UI界面

在这里插入图片描述
按钮我添加了图标,更加美观。添加方法网上有很多,大家可以自行寻找

案例

代码:

#include "widget.h"
#include "ui_widget.h"

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

    //五个复选按钮对应一个槽函数
    connect(ui->checkBox_apple,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_pear,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_peach,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_orange,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_banana,&QCheckBox::stateChanged,this,&Widget::onStateChanged);

}

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



void Widget::on_checkBox_All_clicked()
{
    ui->checkBox_All->setTristate(false);//全选按钮的三态设置成false
    Qt::CheckState state = ui->checkBox_All->checkState();//检测当前状态并赋值给state,便于后期程序编写

    if(state == Qt::Checked)
    {
        ui->checkBox_apple->setChecked(true);//设置复选按钮状态为选中
        ui->checkBox_pear->setChecked(true);
        ui->checkBox_peach->setChecked(true);
        ui->checkBox_orange->setChecked(true);
        ui->checkBox_banana->setChecked(true);
    }
    else if(state == Qt::Unchecked)
    {
        ui->checkBox_apple->setChecked(false);//设置复选按钮状态为未选中
        ui->checkBox_pear->setChecked(false);
        ui->checkBox_peach->setChecked(false);
        ui->checkBox_orange->setChecked(false);
        ui->checkBox_banana->setChecked(false);
    }
}
void Widget::onStateChanged()
{
    QString s;

    int apple = ui->checkBox_apple->isChecked();//检测当前按钮状态
    int pear = ui->checkBox_pear->isChecked();
    int peach = ui->checkBox_peach->isChecked();
    int orange = ui->checkBox_orange->isChecked();
    int banana = ui->checkBox_banana->isChecked();

    if(apple && pear && peach && orange && banana)//全部选中则设置全选按钮为选中,
    {
        ui->checkBox_All->setCheckState(Qt ::Checked);
    }
    else if(apple || pear || peach || orange ||banana)
    {
        ui->checkBox_All->setCheckState(Qt::Unchecked);
    }
    else
    {
        ui->checkBox_All->setCheckState(Qt::PartiallyChecked);
    }

    if(apple)
    {
        s += ui->checkBox_apple->text() +=" ";
    }
    if(pear)
    {
        s += ui->checkBox_pear->text() +=" ";
    }
    if(peach)
    {
        s += ui->checkBox_peach->text() +=" ";
    }
    if(orange)
    {
        s += ui->checkBox_orange->text() +=" ";
    }
    if(banana)
    {
        s += ui->checkBox_banana->text() +=" ";
    }

    ui->lineEdit->setText(s);//字符s显示在文本框

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭小宴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值