Qt控件——复选框QCheckBox

本文详细介绍了QCheckBox的文本属性、三态功能、自动排他以及信号槽的使用,通过UI界面布局和核心代码示例展示如何操作和响应状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、属性和方法

1、文本

2、三态

3、自动排他

4、信号槽

二、案例

1、UI界面布局

2、QCheckBox核心代码


一、属性和方法

1、文本

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

2、三态

复选按钮可以有三种状态:

  • Qt::Checked 选中
  • Qt::Unchecked 非选中
  • Qt::PartiallyChecked 半选中。
// 用于获取和设置是否支持三态
bool isTristate() const
void setTristate(bool y = true)
// 获取和设置复选按钮是否选中:checked/unchecked
bool isChecked() const
void setChecked(bool)
// 设置和获取复选按钮的状态
Qt::CheckState checkState() const
void setCheckState(Qt::CheckState state)

3、自动排他

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

4、信号槽

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

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

二、案例

1、UI界面布局

2、QCheckBox核心代码

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>

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

    // 4个复选按钮对应同一个槽函数
    connect(ui->checkBox_pingguo,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_li,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_tao,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
    connect(ui->checkBox_xiangjiao,&QCheckBox::stateChanged,this,&Widget::onStateChanged);
}

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

void Widget::on_checkBox_all_clicked()
{
    //将“全选”按钮的三态设置为false
    ui->checkBox_all->setTristate(false);
    //只允许在checked和unchecked之间切换,不允许出现半选状态
    Qt::CheckState state = ui->checkBox_all->checkState();

    if(state == Qt::Checked){
        ui->checkBox_pingguo->setChecked(true);
        ui->checkBox_li->setChecked(true);
        ui->checkBox_tao->setChecked(true);
        ui->checkBox_xiangjiao->setChecked(true);
    }else if (state == Qt::Unchecked) {
        ui->checkBox_pingguo->setChecked(false);
        ui->checkBox_li->setChecked(false);
        ui->checkBox_tao->setChecked(false);
        ui->checkBox_xiangjiao->setChecked(false);
    }
}

void Widget::onStateChanged()
{
    QString s;

    int appleChecked = ui->checkBox_pingguo->isChecked();
    int pearChecked = ui->checkBox_li->isChecked();
    int peachChecked = ui->checkBox_tao->isChecked();
    int bananaChecked = ui->checkBox_tao->isChecked();

    if(appleChecked && peachChecked && pearChecked && bananaChecked){
        ui->checkBox_all->setCheckState(Qt::Checked);
    }else if (!(appleChecked || peachChecked || pearChecked || bananaChecked)){
        ui->checkBox_all->setCheckState(Qt::Unchecked);
    }else {
        ui->checkBox_all->setCheckState(Qt::PartiallyChecked);
    }

    if(appleChecked) {
           s += ui->checkBox_pingguo->text() += " ";
       }
   if(pearChecked) {
       s += ui->checkBox_li->text() += " ";
   }
   if(peachChecked) {
       s += ui->checkBox_tao->text() += " ";
   }
   if(bananaChecked) {
       s += ui->checkBox_xiangjiao->text() += " ";
   }
    ui->lineEdit_xuanze->setText(s);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

琪琪猫不会嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值