目录
- 链式编辑
- 操作" . "
- 操作" + "
- 操作" [ ] "
链式编辑
- 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_PRIVATE_ARGUMENT_VARIABLE(ArgType, ArgName) ,在FArgument结构体中添加了变量 ArgType _ArgName。
-
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_PRIVATE_ATTRIBUTE_VARIABLEAttrType, AttrName),在FArgument结构体中添加了变量TAttribute _AttrName,TAttribute<>类型由两个部分构成:Value、Getter。
-
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则实现链式调用。
- 调用SLATE_NAMED_SLOT(DeclarationType, SlotName)宏,向FArgument结构体中添加了结构体TAlwaysValidWidget _SlotName。
那么,使用[ SNew(…)… ],其实就是调用了重载的[]运算符,将其中的Slate表达式传递给_SlotName结构体中的Widget,并且返回TArgument,实现链式调用。
正春华枝俏,待秋实果茂,愿与君共勉