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

UICheckBox 用法解析

最近在用此ui的时候各种方法不易理解,如 disable,active,setSelectedState,setBright,setBrightStyle

 

disable用法:设置UI(或子UI),取消 点亮?点击事件?干嘛的暂且不管

    void disable(bool containChildren = false)
    {
        setBright(false,containChildren);
        setTouchEnable(false,containChildren);
    };

setBright用法:由此可见此属性就是用来触发各种点击状态并重置、记录当前状态

void UIWidget::setBright(bool bright)
{
    m_bBright = bright;
    if (m_bBright)
    {
        m_eBrightStyle = BRIGHT_NONE;
        setBrightStyle(BRIGHT_NORMAL);
    }
    else
    {
        onPressStateChangedToDisabled();
    }
}

setBrightStyle用法:在当前style与默认不冲突的情况下触发点击操作

void UIWidget::setBrightStyle(BrightStyle style)
{
    if (m_eBrightStyle == style)
    {
        return;
    }
    m_eBrightStyle = style;
    switch (m_eBrightStyle)
    {
        case BRIGHT_NORMAL:
            onPressStateChangedToNormal();
            break;
        case BRIGHT_HIGHLIGHT:
            onPressStateChangedToPressed();
            break;
        default:
            break;
    }
}

on

void UICheckBox::onPressStateChangedToNormal()
{ // 默认底图显示
    m_pBackGroundBoxRenderer->setVisible(true);
    m_pBackGroundSelectedBoxRenderer->setVisible(false);
    m_pBackGroundBoxDisabledRenderer->setVisible(false);
    m_pFrontCrossDisabledRenderer->setVisible(false);
}

void UICheckBox::onPressStateChangedToPressed()
{ // 选中底图显示
    m_pBackGroundBoxRenderer->setVisible(false);
    m_pBackGroundSelectedBoxRenderer->setVisible(true);
    m_pBackGroundBoxDisabledRenderer->setVisible(false);
    m_pFrontCrossDisabledRenderer->setVisible(false);
}

void UICheckBox::onPressStateChangedToDisabled()
{ // 禁用底图且如果当前底图是选中状态,那么标示图禁用状态显示
    m_pBackGroundBoxRenderer->setVisible(false);
    m_pBackGroundSelectedBoxRenderer->setVisible(false);
    m_pBackGroundBoxDisabledRenderer->setVisible(true);
    m_pFrontCrossRenderer->setVisible(false);
    if (m_bIsSelected)
    {
        m_pFrontCrossDisabledRenderer->setVisible(true);
    }
}
void UICheckBox::setSelectedState(bool selected)
{// 如果当前图未选中的状态,设置标示图显示
    if (selected == m_bIsSelected)
    {
        return;
    }
    m_bIsSelected = selected;
    m_pFrontCrossRenderer->setVisible(m_bIsSelected);
}

 

看完各种用法再来看实例会更易理解

实现一个卡片的3种效果:锁定、解锁、选中

// 卡牌
UICheckBox* ka = dynamic_cast<UICheckBox*>(zhanShu->getWidgetByName("CheckBox_bg"));
// 选中按钮
UICheckBox* btn = dynamic_cast<UICheckBox*>(zhanShu->getWidgetByName("CheckBox_xuanzhong"));


if(data.isLocked) 
{  // 如果是锁住的状态
  ka->disable(true); 
} 
else 
{ // 解锁的状态
  ka->setBright(true, true); 
  if(data.isSelected) 
  { // 选中的状态
      ka->setBrightStyle(BRIGHT_HIGHLIGHT); 
        btn->setBrightStyle(BRIGHT_HIGHLIGHT); 
  } 
}

 

 错误:checkbox应该是2张图标叠加产生,背景图和选中标示图。通过标示图(对号)的显示和未显示来实现选中和为选中的效果。所以选中按钮应该是以标示图的形式存在,而此方法将选中状态作为单独的ui存在。

锁住状态:比较好设置,只要设置disable,并设置包含子元素。设置当前卡片及内部元素图标为禁用状态且不可点击即可

解锁:setTouchEnabled 不能开启,因为往往解锁操作需要触发请求操作,如果是tableview的cell,tableviewtouched去做就可以了,自身的点击操作不应该开启

未选中:setBright ,全部点亮即可

选中:需要额外设置选中效果,因为源生的方法没有提供接口

 

 注:此需求下chechbox并不是合适的选择,uiimage或者uibutton好像更合适

转载于:https://www.cnblogs.com/idance/p/3442673.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL笔记系列:数据库概述
  • JOIN 和 WHERE?简单的问题也有学问。
  • 图像替换技术
  • WCF 第四章 绑定 创建一个自定义绑定
  • 健康小常识
  • 似水流年 ? Chrome调试大全
  • 关于gulp复制文件时把整个目录结构都复制的问题解决
  • java 求集合真子集_高中数学第2讲:子集与并集
  • 网线传输速度测试_如何鉴定网线好坏?怎样测网线电阻?
  • 展示 用户画像_智能时代如何做好精准营销?从用户画像智能化开始
  • centos 一键安装ftp 配置_CentOS6一键安装vsftp脚本
  • ribbon基于接口配置超时_feign的ribbon超时配置和hystrix的超时配置说明
  • 怎么把好几行弄成一行_怎么在word文档里把很多行一下合并成一行
  • controller不跳转页面的几个原因_为什么很多人30岁了,还不结婚,有这几个原因...
  • clob存base64文件存不进去_cephfs:文件的扩展属性xattr
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【mysql】环境安装、服务启动、密码设置
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • AWS实战 - 利用IAM对S3做访问控制
  • create-react-app做的留言板
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript 一些 DOM 的知识点
  • MQ框架的比较
  • python学习笔记-类对象的信息
  • Vue学习第二天
  • 初探 Vue 生命周期和钩子函数
  • 技术胖1-4季视频复习— (看视频笔记)
  • 近期前端发展计划
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • - 转 Ext2.0 form使用实例
  • elasticsearch-head插件安装
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​插件化DPI在商用WIFI中的价值
  • ​决定德拉瓦州地区版图的关键历史事件
  • #etcd#安装时出错
  • #Linux(权限管理)
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #预处理和函数的对比以及条件编译
  • $forceUpdate()函数
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C++20) consteval立即函数
  • (Git) gitignore基础使用
  • (安卓)跳转应用市场APP详情页的方式
  • (学习日记)2024.02.29:UCOSIII第二节
  • ./和../以及/和~之间的区别
  • .NET Framework .NET Core与 .NET 的区别
  • .net 流——流的类型体系简单介绍
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • /var/spool/postfix/maildrop 下有大量文件
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ solr入门 ] - 利用solrJ进行检索