实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程:
1. 实例甜点前面的三篇教程;
2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法):
http://www.cnblogs.com/JackSamuel/p/jack975645419_0.html
重要说明:本实例是在《实例甜点 Unreal Engine 4迷你教程(1)》所建立的工程LearnWidget上进行的。
第1步:我们想要创建两个Widget管理者,回顾一下目前已有的WidgetMng类,它有如下成员和方法:
UPROPERTY()
class UUserWidget* SlaveWidget;【我所管理的奴隶widget】
UFUNCTION()
void Initialize();【我为我的slavewidget初始化】
为了使用它们,并且扩展一些新功能,我们创建2个WidgetMng的子类:

(我究竟想干啥??我希望能够实现背包系统,就是有物品从1背包到2背包,请先看这篇博文:http://www.cnblogs.com/JackSamuel/p/jack975645419_0.html
但是摸索了一段时间之后没有找到方法,所以本文的目的就只是用C++来为VerticalBox添加子Widget)

同样,创建Bag2Mng(继承自WidgetMng)和ItemMng(继承自WidgetMng);
第2步:创建一个widget叫做Widget_Item(它作为ItemMng的奴隶Widget);

第3步:创建一个Widget叫做Widget_Bag1(它做谁的奴隶呢?看名字就能知道了吧)。配置如下(如果你没有办法通过图片来看出怎么拼UMG,请前往学习更为基础的部分):

第4步:创建一个叫做Widget_Bag2的Widget,和上面的Widget_Bag1差不多就行。【后记:Bag2这个类可以不实现,没有找到通过C++实现DragAndDrop的方法】
第5步:改一下小部件的变量名:(这一步有许多小操作,注意别饭粗心了哦)


(WidgetBag1和Bag2都这样改)
第6步:创建蓝图子类(这一步是非常有必要的,通常C++纯类很难使用,都是用BP来包装,暴露给Editor使用的):
用上面提到的三个类继承三个BP如下:

第7步:记得在BPHUD中调整:

保存编译,运行效果:

可以看到,左边和右边分别是背包1,和背包2.
第8步:【重要的一步】
加入清空儿子的逻辑:
#include "Bag1Mng.h"
#include "Runtime/UMG/Public/Components/VerticalBox.h"
#include "Runtime/UMG/Public/Components/TextBlock.h"
void ABag1Mng::Initialize()
{
Super::Initialize();
VerticalBox = Cast<UVerticalBox>( SlaveWidget->GetWidgetFromName(TEXT("VB")) );
if (VerticalBox)
{
VerticalBox->ClearChildren();//【请注意这个函数】
}
}
效果:

左侧的背包1的所有儿子都被清空了;
第9步:【本步骤企图完成:初始化20个孩子对应20个序号在背包1中】
修改代码如下:
▼代码开始
void ABag1Mng::Initialize()
{
Super::Initialize(); VerticalBox = Cast<UVerticalBox>( SlaveWidget->GetWidgetFromName(TEXT("VB")) );
if (VerticalBox)
{
VerticalBox->ClearChildren();
} for (auto i = ; i < ; i++)
{
UUserWidget* NewKid = CreateWidget<UUserWidget>(GWorld->GetGameInstance(), ItemWidgetClass); VerticalBox->AddChildToVerticalBox(
NewKid
); if(UTextBlock* Text_ID = Cast<UTextBlock>(NewKid->GetWidgetFromName(TEXT("Text_ID"))))
Text_ID->SetText(FText::AsNumber(i)); }
}
▲代码结束
效果:

(重要的提示:如果读者已经跟丢了步骤,某些小细节没有完全一致,那么也没有关系,实在没有办法效果一致的话就只看里头的代码,和我的效果图即可,主要是在UMG的C++编程上有一个基本的掌握)
——小江村儿的文杰 zouwj5@qq.com 2017年8月4日13:57:11
实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren的更多相关文章
- 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove
本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...
- 实例甜点 Unreal Engine 4迷你教程(3)之用C++改变Image小部件的其它属性
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色: 在上一次的迷你教程的LearnWidgets工程上进行(如 ...
- 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...
- 实例甜点 Unreal Engine 4迷你教程(1)之如何用C++将纹理绘制在UserWidget的Image小部件上
完成本迷你教程之前,请前往完成以下迷你教程: 无前置教程待完成. 本教程适合的人群: 初学者,具有开发经验两周: 本示例的目的:为了在代码中实现UMG中的这个功能: 说明:这是一些列迷你教程的首篇,所 ...
- 实例甜点 Unreal Engine 4迷你教程(5)之函数中的静态变量
本小节的教程无前置教程,可直接学习,篇幅很短. 本教程浓缩起来就是一句话:函数中的静态变量在调试过程中保留值.所以需要谨慎对待. 什么意思?请先不要一步一步对着做,而整体地看一遍下面的过程: 第一步: ...
- Unreal Engine 4 系列教程 Part 1:入门
原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...
- Unreal Engine 4 系列教程 Part 3:材质教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 4:UI教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 5:制作简单游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
随机推荐
- 利用Jsoup包爬取网站内容
一 Jsoup包 下载链接:http://download.csdn.net/detail/u014000832/7994245 二 爬取搜狐新闻网站标题等内容 package com.test1; ...
- 基于Mac制作iPhone铃声教程,iTunes定制铃声
前言: 网上太多制作方法了,不管是借助第三方软件还是基于iTunes的,不过这些方法都太旧了,有时看起来 ,界面的变化或其他原因,导致很不爽. 正好记录下我最近使用的一种方法: 正文: 一.下载你需要 ...
- 利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包
因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是 ...
- Python Click 学习笔记(转)
原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...
- work1-英语辅导班在线报名系统
作品简述: 这是一个英语辅导班在线报名系统,目的是提供一个供学生报名辅导班的平台,也同时为老师收集报名信息提供便利. 使用的语言: php+html+js 服务器: 新浪sae服务器,apache 数 ...
- Http异步发送之HttpWebRequest的BeginGetResponse
关于http异步发送,一开始我的做法都是用thread或者task去完成的:后来发现HttpWebRequest本身就提供一个异步的方法. 总感觉.Net自己提供的异步方法可能要优于我们自己用线程去实 ...
- linux新手入门前知道的一些概念
前言: 这篇文章是结合自己从小白开始学linux到工作中运用linux系统,以新手怎么理解的角度来说说linux系统,希望能给想学习linux的新手带来一些帮助. 引子:随着互联网技术不断更新,企业对 ...
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
- Delphi临界区的使用
在开发一个平板点餐软件后台订单打印程序时,使用线程订单打印,为防打印阻塞使用临界区. 类: type MYPARA=record title:pchar; //标题 str:pchar; flag:i ...
- jvm学习006 jvm内存结构分配
主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: ...