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

复选按钮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_OBJECTpublic: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.mrgr.cn/news/28839.html

相关文章:

  • FastAPI动态路由设计:使用APIRouter处理复杂回调函数
  • 使用Faiss进行K-Means聚类
  • 【Linux】Shell编程入门
  • 面试真题-TCP的三次握手
  • 鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
  • 【C++】——继承详解
  • GPU加速生物信息分析的尝试
  • react-native和原生android的交互
  • ThreadX源码:Cortex-A7的tx_thread_irq_nesting_end(嵌套中断结束动作).s汇编代码分析
  • 算法竞赛命题数据生成方法
  • 硬件工程师笔试面试学习汇总——器件篇目录
  • iOS 18 新功能:控制中心大變身!控制項目自由選配
  • 电路设计学习(一)
  • 【AcWing】前缀和与差分(一维 + 二维)
  • 企业级即时通讯平台有哪些?探究适合企业使用的即时通讯工具
  • 72、结合无人机进行rk3588oak-lite跟踪目标物体进行识别、跟踪、保持距离
  • 虚拟机centos_7 配置教程(镜像源、配置centos、静态ip地址、Finalshell远程操控使用)
  • LeetCode 每日一题 2024/9/9-2024/9/15
  • 微服务下设计一个注解标识是否需要登录
  • ccfcsp-202203(1、2)