当前位置: 首页 > article >正文

复选按钮QCheckBox

使用场景:多选多

文本

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

三态

复选按钮有三种状态

  • 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)

 自动排他

复选按钮是多选多,因此自动排他是默认禁能的

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

信号

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

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

举例:

多选多,全选时父项选中,未全选时父项半选,点击父项全选或全不选

 值得注意的是:全选按钮点击后要禁能掉三态,因为点击后只能是选中或者非选中

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QCheckBox>
#include<QVBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr):QWidget(parent)
    {
        resize(400,300);
        QVBoxLayout* v_box=new QVBoxLayout(this);

        all_select=new QCheckBox(this);
        all_select->setText("全选");

        orange=new QCheckBox(this);
        orange->setText("橘子");

        apple=new QCheckBox(this);
        apple->setText("苹果");

        grape=new QCheckBox(this);
        grape->setText("葡萄");

        v_box->addWidget(all_select);
        v_box->addWidget(orange);
        v_box->addWidget(apple);
        v_box->addWidget(grape);

        //绑定信号槽,点击全选按钮时,全选或全不选
        connect(all_select,&QCheckBox::clicked,this,[=](){

            //全选按钮点击后要禁能掉三态,因为点击后只能是选中或者非选中
            all_select->setTristate(false);

            if(all_select->isChecked())
            {
                //全选按钮被选中时,其他复选框跟着选中
                orange->setChecked(true);
                apple->setChecked(true);
                grape->setChecked(true);

            }
            else
            {
                //全不选
                orange->setChecked(false);
                apple->setChecked(false);
                grape->setChecked(false);
            }
        });

        //绑定信号槽
        connect(orange,&QCheckBox::clicked,this,&Widget::onClicked);
        connect(apple,&QCheckBox::clicked,this,&Widget::onClicked);
        connect(grape,&QCheckBox::clicked,this,&Widget::onClicked);

    }
    ~Widget()=default;
private:
    void onClicked()
    {
        if(orange->isChecked()
            &&apple->isChecked()
            &&grape->isChecked())
        {
            //若全部选中了,则全选按钮也置为选中
            all_select->setCheckState(Qt::Checked);
        }
        else if(!orange->isChecked()
                   &&!apple->isChecked()
                   &&!grape->isChecked())
        {
            //若都没选中,则全选按钮也置为不选中
            all_select->setCheckState(Qt::Unchecked);
        }
        else
        {
            //其他情况则为半选
            all_select->setCheckState(Qt::PartiallyChecked);
        }
    }

    QCheckBox* all_select;
    QCheckBox* orange;
    QCheckBox* apple;
    QCheckBox* grape;

};
#endif // WIDGET_H

学习链接:https://github.com/0voice 


http://www.kler.cn/news/309027.html

相关文章:

  • 【C++】模版的进阶
  • 【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索
  • UE5中使用UTexture2D进行纹理绘制
  • 【OpenAPI】Spring3 集成 OpenAPI 生成接口文档
  • (web自动化测试+python)1
  • 金蝶云星空和金蝶云星空接口打通对接实战
  • Vite:快速构建现代Web应用的工具
  • 硬件工程师笔试面试——无线通讯模块
  • 服务器管理:从零开始的服务器安装与配置指南
  • elasticsearch 开启API密钥进行认证
  • Python骨架长度检测
  • leetcode-4. 寻找两个正序数组的中位数
  • 使用QT编写有图形界面的TCP局域网聊天室(app)
  • QT使用事件事件和绘制事件实现简易时钟
  • java自定义注解
  • 数据结构——二叉搜索树
  • linux-网络管理-防火墙配置
  • 面试真题-TCP的三次握手
  • STM32外设-0.96寸OLED显示屏
  • [数据集][目标检测]男女性别检测数据集VOC+YOLO格式9769张2类别
  • AI重塑视觉体验:将图像与视频转化为逼真可编辑的3D虚拟场景
  • 使用jackson将xml和对象、List相互转换
  • 碰撞检测 | 图解线段几何与线段相交检测原理(附ROS C++可视化)
  • pandas读取Excel保留空格与数字前置0
  • UNI-APP 富文本编辑器,可以对图片、文字格式进行编辑和混排。
  • python之openpyxl模块——实现Excel表格的处理(万字教学,全网最全,超详细!)
  • 深度解析代理IP地址与端口:定义及高效获取方法
  • 硬件工程师笔试面试——保险丝
  • 运维面试题1
  • 微信小程序中实现类似于 ECharts 的图表渲染及优化