大神的Blog挂了,从Bing快照里复制过来的备份
UWidget封装SWidget到UMG
为了使用UMG中的一些高级或便利特性,需要将制作好的Slate控件封装到UWidget中去。
当前UE4版本4.8.3。
将Slate封装到UMG中去有很多的好处,因为在代码中对需要重用的控件进行不断的重新布局是一件非常繁琐的事情。同时,UMG也有在3D空间中进行显示这样的高级功能。
由于UMG本身就是对Slate的封装,所以这个过程可以参照UE4的源代码进行研究。
这里所做的是尝试对上一回所做的文件目录树进行封装。
直接上代码
CListViewWidget.h
C++
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#pragma once
#include "CListViewWidget.generated.h"
UCLASS()
class TEST_MP_API UCListViewWidget : public UWidget
{
GENERATED_UCLASS_BODY()
public:
#if WITH_EDITOR
// UWidget interface
virtual const FSlateBrush* GetEditorIcon() override;
virtual const FText GetPaletteCategory() override;
virtual void OnCreationFromPalette() override;
// End UWidget interface
#endif
protected:
// UWidget interface
virtual TSharedRef<SWidget> RebuildWidget() override;
virtual void OnBindingChanged(const FName& Property) override;
// End of UWidget interface
protected:
TSharedPtr<class SDDFileTree> MyFileTree;
};
|
封装类直接继承自UWidget即可,剩下的就是对UWidget中的函数进行实现。
CListViewWidget.cpp
C++
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
// Fill out your copyright notice in the Description page of Project Settings.
#include "Test_mp.h"
#include "SDDFileTree.h"
#include "CListViewWidget.h"
/** GENERATED_UCLASS_BODY() */
UCListViewWidget::UCListViewWidget(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
bIsVariable = false;
}
/** <编辑器属性 */
#if WITH_EDITOR
// <图标
const FSlateBrush* UCListViewWidget::GetEditorIcon()
{
return FUMGStyle::Get().GetBrush("Widget.TextBlock");
}
// <分类目录
const FText UCListViewWidget::GetPaletteCategory()
{
return NSLOCTEXT("Testmp", "Custom", "Ch_Custom");
}
// <创建时的默认值
void UCListViewWidget::OnCreationFromPalette()
{
;
}
#endif
TSharedRef<SWidget> UCListViewWidget::RebuildWidget()
{
MyFileTree = SNew(SDDFileTree).OwnerHUD(nullptr);
return MyFileTree.ToSharedRef();
}
void UCListViewWidget::OnBindingChanged(const FName& Property)
{
Super::OnBindingChanged(Property);
if (MyFileTree.IsValid())
{
;
}
}
|
在所有的函数中,RebuildWidget()是最重要的。
参看UWidget的源代码可以发现,所有对被封装的SWidget的引用都是通过这个函数获得的,因此在这里面写上SWidget对应的构造生成就可以了。
OnBindingChanged函数是用于属性代理通知的,这里是简单的封装,没有提供属性代理,因此直接return也是可以的。
在WITH_EDITOR宏中的是编辑器属性,用于封装后的UWidget在蓝图编辑器中显示。具体每一个函数的含义已经在注释中了。
将上面的代码编译通过之后,就可以在UMG的编辑器中看到我们添加的控件了:
![]()
将CListViewWidget拖动到控件蓝图上,并在HUD中展示此控件蓝图,就能在项目中与其他UMG控件一样使用了:
![]()
这样以来Slate的使用就会变得方便很多。
大神的Blog挂了,从Bing快照里复制过来的备份的更多相关文章
- Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
转载:https://blog.csdn.net/zhaokaiqiang1992/article/details/43731967 CSDN 鸿洋:http://blog.csdn.net/lmj6 ...
- [转帖] select、poll、epoll之间的区别总结[整理] + 知乎大神解答 https://blog.csdn.net/qq546770908/article/details/53082870 不过图都裂了.
select.poll.epoll之间的区别总结[整理] + 知乎大神解答 2016年11月08日 15:37:15 阅读数:2569 http://www.cnblogs.com/Anker/p/3 ...
- 【推荐】Java工程师如何从普通成为大神值得一读
本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的 ...
- Android 大神博客汇集
非常给力的CSDNBlog和个人Blog,这些Blog都有一个共同的特点,即内容详实,讲解透彻,也算是给后来的初学者指一条路吧!只要你下定决心跟随强者的脚步,成为人们眼中的大神,只不过是时间问题! 下 ...
- 推荐几个Dynamic Crm的大神博客
ghostbear的博客:http://blog.csdn.net/ghostbear/article/category/1072859 ghostbear大神的博客是新手学习Dynamics Crm ...
- python目标定位(借鉴csdn上大神)
写博客是为了记录下来,毕竟好多东西记不住,看过就忘了,收藏又太多,还不如搬运到自己博客下面,随时可翻~~~ 近期再学目标识别与定位,看着原理都很简单,但是真自己做,又觉得困难重重. csdn上一个大神 ...
- 大神们都在用的两个国外的免费离线下载:Rain& LoadBT
大神们都在用的两个国外的免费离线下载:Rain& LoadBT 最近QQ离线和迅雷离线也都挂了,115还死贵,所以分享两个国外免费的网站.希望可以为大家提供一些帮助,同时也借此机会同大家相互交 ...
- [ZZ] 麻省理工( MIT)大神解说数学体系
麻省理工( MIT)大神解说数学体系 http://blog.sina.com.cn/s/blog_5ff4fb7b0102e3p6.html 其实每一门学科都应该在学习完成后,在脑子里面有一个体系, ...
- 搞IT,算法编程不错的学习网址 & 一些专栏博客大神的地址(汇总)
博客专栏大神 王晓华(算法的乐趣) 算法系列:http://blog.csdn.net/orbit/article/category/830251 PostgreSQL深入理解内核系列:http:// ...
随机推荐
- 关于 FPGA 内部信号扇入扇出
扇入.扇出系数 扇入系数是指门电路允许的输入端数目.一般门电路的扇入系数为1—5,最多不超过8.扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力.一般门电路的扇出系数为8,驱动器的扇出系数 ...
- jquery load 和 iframe 比较
如果要加载的东西比较简单,里面的没有复杂的数据和逻辑,可以使用load.如果要加载的页面自身有复杂的逻辑.操作,还是建议使用ifame,因为iframe里面可以引入自身的js和样式,而load引入的东 ...
- Lua在单片机中的移植
Lua代码符合ANSI C标准,只要有C编译器的开发环境就能跑Lua. 虽说只要有C编译器就能跑Lua,但是单片机的环境太简单,有些C标准的内容仍旧无法支持. Lua的官网是:www.lua.org ...
- EndNote(一)之基本介绍
作为一个经常看文献的人,发现看了很多文献,但是之后需要再找某一篇文献的时候,却无法找到文献在哪里了.混乱的文献管理方式,浪费了很多时间在翻阅自己已经看过的文献之中.这是一件很头痛的事情,才想起借助软件 ...
- 根据对象的某一属性进行排序的js代码(如:name,age)
var data = [{ name: "jiang", age: 22 }, { name: "AAAAAAAAAAAAAA", age: 21 }, { n ...
- Android SDK Manager无法更新的解决[ 转]
将下列内容行添加到hosts文件中: 74.125.237.1 dl-ssl.google.com 1.Windows C:\WINDOWS\system32\drivers\etc\Hosts 2. ...
- NodeJS+Express下构建后端MVC文件结构
关于MVC的结构大体上有两种方式,其一按照层级进行文件夹分类,其二是按照业务进行文件夹分类.关于这个demo相关的业务简单,所以暂采用第一种的方式,当然实际当中很恨复杂的项目可以采用两种方式相结合的方 ...
- swift 3.0 协议笔记
协议能够要求遵循者必须含有一些特定名称和类型的实例属性(instance property)或类属性(type property),也能够要求属性的(设置权限)settable 和(访问权限)gett ...
- js 实时监听input中值变化
注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...
- 简单的sql server连接
private string constring="data source=112.74.73.122;initial catalog=qzyData;user id=sa;password ...