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

【UE教程/进阶】Slate链式编辑原理

目录

  • 链式编辑
    • 操作" . "
    • 操作" + "
    • 操作" [ ] "


链式编辑

在这里插入图片描述

  • SNew()
  • .
  • +
  • []

操作" . "

  • SLATE_ARGUMENT(ArgType, ArgName) 宏

    • 调用宏 SLATE_PRIVATE_ARGUMENT_VARIABLE(ArgType, ArgName) ,在FArgument结构体中添加了变量 ArgType _ArgName。
      在这里插入图片描述
    • 调用宏SLATE_PRIVATE_ARGUMENT_FUNCTION(ArgType, ArgName),在FArgument结构体中添加了函数FArgument& ArgName(ArgType InArg),函数中将InArg赋值给_ArgName,并返回FArgument
      在这里插入图片描述
  • SLATE_ATTRIBUTE(ArgType, ArgName)宏

    • 调用宏SLATE_PRIVATE_ATTRIBUTE_VARIABLEAttrType, AttrName),在FArgument结构体中添加了变量TAttribute _AttrName,TAttribute<>类型由两个部分构成:Value、Getter
      • Value:储存对应AttrType类型变量的值。
      • Getter:绑定一个外部函数。当Getter没有绑定任何函数时,可以将Attribute当作一个纯变量来使用;当Getter绑定外部函数时,会每帧调用Getter绑定的函数来更新Value值。
        在这里插入图片描述
    • 调用宏SLATE_PRIVATE_ATTRIBUTE_FUNCTION(AttrType, AttrName),在FArgument结构体中添加了函数 FArgument& AttrName(TAttribute InAttribute),函数中将InTAttribute赋值给_AttrName,并返回FArgument
      在这里插入图片描述
    • 也可以使用 TSlateAttribute ,TSlateAttribute的性能更加优秀
  • SLATE_EVENT(DelegateName, EventName)宏

    • 在FArgument结构体中添加了变量DelegateName _EventName
      在这里插入图片描述

    • 在FArgument结构体中添加了函数FArgument EventName(DelegateName& InDelegate),在这个函数中将InDelegate赋值给_EventName,并且返回FArgument
      在这里插入图片描述

那么,使用 .参数名(参数) ,其实就是调用了FArgument中的同名函数,设置了相应属性的值,并且这个函数仍会返回FArgument,可以链式调用


操作" + "

  • SLATE_SLOT_ARGUMENT(SlotType, SlotName)宏
    • 向FArgument结构体中添加了TArray数组_SlotName。
    • 在 Construct() 函数中,会取出_SlotName数组中的Slot,将其添加到子控件数组中。
    • 在 OnPaint() 函数中,对子控件中的Slot进行处理。
    • 重载+运算符FArgument& + (typename SlotType::FSlotArgument& SlotToAdd),这个函数中将SlotToAdd添加到_SlotName数组中,并返回FArgument
      在这里插入图片描述

那么,使用+,其实就是调用了重载的+运算符,将需要的Slot添加进Slate的_SlotName数组中,并且这个函数会返回FArgument,就可以链式调用。


操作" [ ] "

  • SLATE_DEFAULT_SLOT(DeclarationType, SlotName)宏
    • 调用SLATE_NAMED_SLOT(DeclarationType, SlotName)宏,向FArgument结构体中添加了结构体TAlwaysValidWidget _SlotName
      在这里插入图片描述
    • TAlwaysValidWidget结构体中有一个指针SWidget* Widget,并且该指针一直有效,默认为SNullWidge。
    • 向FArgument结构体中添加了函数 NamedSlotProperty SlotName(),这个函数返回_SlotName结构体
    • 重载[]运算符DeclarationType& [] (TSharedRef& InChild),这个函数将InChild赋值给Widget,并且返回DeclarationType,若DeclarationType是TArgument则实现链式调用。
      在这里插入图片描述

那么,使用[ SNew(…)… ],其实就是调用了重载的[]运算符,将其中的Slate表达式传递给_SlotName结构体中的Widget,并且返回TArgument,实现链式调用。


正春华枝俏,待秋实果茂,愿与君共勉

http://www.dtcms.com/a/273617.html

相关文章:

  • 解决echarts数据更新了图表不更新
  • GPU 降成本免运维,睿观 AI 助手选择函数计算
  • 打破信息壁垒!可视化如何让交通数据 “开口说话”
  • C#元组:从基础到实战的全方位解析
  • 人脸图像生成(DCGAN)
  • Qt数据库编程详解:SQLite实战指南
  • Vue 3 中父组件内两个子组件相互传参的几种方法
  • Vue 3 入门——自学习版本
  • DOM编程实例(不重要,可忽略)
  • 分享|2025年机器学习工程师职业技术证书报考指南
  • 论容器化 | 分析Go和Rust做医疗的后端服务
  • 在vue中使用Three.js渲染FBX模型
  • arcgis api for js 设置地图服务请求带有请求头信息
  • 录音实时上传
  • uniapp
  • Claude Code是什么?国内如何使用到Claude Code?附国内最新使用教程
  • 基于定制开发开源AI智能名片与S2B2C商城小程序的旅游日志创新应用研究
  • uniapp小程序tabbar跳转拦截与弹窗控制
  • Elasticsearch混合搜索深度解析(上):问题发现与源码探索
  • Excel 转 JSON by WTSolutions API 文档
  • 较为深入的了解c++中的string类(2)
  • MyBatis 从入门到实战:代理 Dao 模式下的 CRUD 全解析
  • Netplan 配置网桥(Bridge)的模板笔记250711
  • excel如何只保留前几行
  • 提示工程:解锁大模型潜力的核心密码
  • 基于redis的分布式session共享管理之销毁事件不生效问题
  • 这个方法的目的是检查一个给定的项目ID(projectId)是否在当前数据库中被使用(搜索全库)
  • SortByCustomOrder 根据指定的顺序对任意类型的列表进行排序
  • Python七彩花朵
  • 【实时Linux实战系列】实时系统测试与合规认证指南