美文网首页Unreal 技术笔记
Unreal UMG源码阅读(3)

Unreal UMG源码阅读(3)

作者: 子夜书案 | 来源:发表于2019-08-02 16:35 被阅读0次

我们今天来看看Layout/Children.h,这个类为啥要单独看看呢?是因为我们要了解SWihget 的话要首先知道它的layout的一些设置。而这个类可以比较好的看明白它的一些设计思想的。

这个Children.h里我们先看下FChildren,它是别的类的baseClass。

这个类很简单,代码是这样的:

FChildren 源码

首先我们看下 SLATECORE_API 它是一个定义,这个定义是为了能方便的把这个类的方法方便的导出DLL。

Num*() const =0 ; 是指什么呢?

它指的是这个函数是个abstract function  必须要在child calss 里实现它。我写了一个测试用例

测试用例

当我们没有用B来继承A时,A是不能单独编译的会报“error: invalid new-expression of abstract class type 'A'”,指的是A 中的virtual方法没有被实现。关于pure virtual function with implementat的详细解读

那么现在我们在回过头来看 virtual int32 Num() const = 0; 就好解读多了,这是一个要子类实现的返回数量的函数。

后面 TSharedRef<SWidget> GetChildAt(int32 Index) = 0;  TSharedRef 是unreal里的一个共享指针。而方法也很简单,就是获得指定位置对象的共享指针。

后面的FNoChildren 没什么好看的,我们来看看后面的 TWeakChild,这个一个为了临时加入Widget人UI而准备的,例如:Tooltips在显示的时候加入parentwidget,而在时间到了的时候就会移除。我们重点来看看里面的AttachWidget ,DetachWidget方法。

TWeakChild源码

这两个方法是一对,一个是把引用相关联,一个是分离开关联。

再后面是两个layout相关的类TSupportsContentAlignmentMixin,TSupportsContentPaddingmixin.

它们的功能和它的名字一样,一个是存储横向和纵向对齐的组件,一个是存储padding的FMargin数据的类。

TPanelChidren源码

里面有一个要注意,private TIndirectArray<SlotType> 这是一个Indirect array ,也就是说TPanelChidren本身就是一个array,里面的方法没什么特别要看的,都是对array的一些操作。

TPanelChildrenConstIterator 顾名思义,是PanelChildren的迭代器,在初始化时要定义好是正向的(LeftToRight)还是逆向的(RightToLeft),剩下对 operator++ ,operator--,operator*,operator->重新定义了。

最后面是一个特殊的child ,叫 TOneDynamicChild,它可以看成是一个PanelChildren的委托,例如,我们有一个全局的PanelChildren,而我们要得到一个当前active的child,这个TOneDynamicChild就起到作用了。

整体看来,Children.h里定义了和widget相关的容器类,对它们进行了树状的层级管理。

相关文章

网友评论

    本文标题:Unreal UMG源码阅读(3)

    本文链接:https://www.haomeiwen.com/subject/vcrorctx.html