目錄
- 鏈式編輯
- 操作" . "
- 操作" + "
- 操作" [ ] "
鏈式編輯
- 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,實現鏈式調用。
正春華枝俏,待秋實果茂,愿與君共勉