关于Unreal Engine中Widget的Slot
各种Layouts与Widgets之间可能会有嵌套、组合之类的关系的。
比如,一个Layout引用一个widget,通常C++里可能会引用widget基类指针,UE4对这种使用指针的用法进行了建模,用Slot来代替指针的作用,Slot里比普通的指针提供了额外的一些信息,可以认为是一个强化版的指针,它包含双指针,一个指向这个Slot对应的Widget(C),一个指向该Widget(C)的ParentWidget(通常值就是this)。因此,每一个Widget里都有一个Slot成员(定义在Widget.h里的UPanelSlot* Slot;)。
UPanelSlot* PanelSlot = NewObject<UPanelSlot>(this, GetSlotClass(), NAME_None, NewObjectFlags); PanelSlot->Content = Content; PanelSlot->Parent = this; Content->Slot = PanelSlot;
这里能够清晰看到,Content作为一个UWidget,其Slot成员的Content属性指向该Widget自身,Parent属性指向该Widget的父Widget。即我们应该关注的是Slot树状结构,这棵树才是我们看到的UI布局的逻辑结构,树的节点都是Slot,每个Slot都有Slot->Content访问的是真正的Widget,Slot->Parent访问的是Widget的ParentWidget,同时注意,Parent类型是UPanelWidget*,还有Slot要想访问其父Slot,应该通过Slot->Parent->Slot