转自:http://aigo.iteye.com/blog/2296218

目的:在自定义的Widget初始化完毕后,获取其内部的button、combo等UMG组件的C++指针。

这里我们新建了一个C++类,LoginWidget,继承自UserWidget,然后新建了一个Widget蓝图LoginWidgetBP,继承自LoginWidget C++ class。我们想在这个LoginWidgetBP蓝图被实例化之后,获取这个UI蓝图内的各个UI组件。

具体实现:

LoginWidget.h

假设我自己的Widget叫LoginWidget,继承自:UserWidget。

ULoginWidget::ULoginWidget(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
ComboServer = NULL;
TxtBoxAccount = NULL;
TxtBoxPwd = NULL;
} bool ULoginWidget::Initialize()
{
if (!Super::Initialize())
{
return false;
} if (UComboBoxString* combo = Cast<UComboBoxString>(GetWidgetFromName("ComboServer")))
{
ComboServer = combo;
}
if (UEditableTextBox* txtbox = Cast<UEditableTextBox>(GetWidgetFromName("TxtBoxAccount")))
{
TxtBoxAccount = txtbox;
TxtBoxAccount->SetKeyboardFocus();
}
if (UEditableTextBox* txtbox = Cast<UEditableTextBox>(GetWidgetFromName("TxtBoxPwd")))
{
TxtBoxPwd = txtbox;
} return true;
}

其中,这个判断是必须的,否则出现空指针异常:

if (!Super::Initialize())
{
return false;
}

ComboServer、TxtBoxAccount、TxtBoxPwd三个字符串分别是widget组件ID。另外也不用担心各个组件的层级关系(比如,Image A是Button的子节点),widget蓝图中的所有组件存放在UserWidget中的一个map当中。

补充:

父类还有一个函数:

如果当前实例化的UI不是widget蓝图,而是一个C++ class,在触发Initialize()之后,还会继续触发CustomNativeInitilize(),否则只触发Initialize(),参见UserWidget.cpp:

组件Slate教程 & UMG widget构造初始化函数中获取其内部组件的更多相关文章

  1. 在被调用函数中获取资源及C++中的引用

    #include <iostream> using namespace std; struct Teacher{ char name[64]; int age; }; //在被调用函数 获 ...

  2. 在自定义组件中获取spring底层组件

    要想在自定义组件中获取spring底层的各种组件,只需让自定义组件实现一系列接口即可,这些接口都是Aware的子接口.常见的有: 1. ApplicationContextAware——用于获取IOC ...

  3. vue 钩子函数中获取不到DOM节点

    原文链接:https://jingyan.baidu.com/article/f96699bbfe9c9d894f3c1b4b.html 两种解决方案: 1:官方解决方案: 受到 HTML 本身的一些 ...

  4. AngularJs在ng-click函数中获取代表当前元素的DOM对象

    html代码 <div ng-click="test($event)">111</div> Controllers.js $scope.test= func ...

  5. 在fragment中获取activity的组件

    在fragment中使用getActivity()即可获取activity的引用

  6. 在VideoFileClip函数中获取“OSError:[WinError 6]句柄无效”

    我正在使用python通过导入moviepy库创建一个程序,但收到以下错误: from moviepy.editor import VideoFileClip white_output = 'vide ...

  7. C++箴言:避免构造或析构函数中调用虚函数

    如果你已经从另外一种语言如C#或者Java转向了C++,你会觉得,避免在类的构造函数或者析构函数中调用虚函数这一原则有点违背直觉.但是在C++中,违反这个原则会给你带来难以预料的后果和无尽的烦恼. 正 ...

  8. 《扩展和嵌入python解释器》1.4 模块方法表和初始化函数

    <扩展和嵌入python解释器>1.4 模块方法表和初始化函数   1.4 模块方法表和初始化函数 下面,我演示如何从Python程序调用spam_system().首先,我们需要在’方法 ...

  9. STM32入门系列-使用库函数点亮LED,LED初始化函数

    要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...

随机推荐

  1. 用于主题检测的临时日志(0ece3f5c-d74f-449c-85a7-ed53fffb0e94 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(abf5973f-502f-47e6-8825-4dd1c2cdd799 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

  2. 1.2 Linux中的进程 --- fork、vfork、exec函数族、进程退出方式、守护进程等分析

    fork和vfork分析: 在fork还没有实现copy on write之前,Unix设计者很关心fork之后立即执行exec所造成的地址空间浪费,也就是拷贝进程地址空间时的效率问题,所以引入vfo ...

  3. magento如何改变首页的布局

    打开MAGENTO_INSTALLED_DIR/app/design/frontend/default/default/layout/page.xml 找到名字为'root'的block定义 < ...

  4. 【linux基础】core dump debug

    1.check core dump; ulimit -c or ulimit -a nvidia@tegra-ubuntu:~$ ulimit -a core data seg size (kbyte ...

  5. 拒绝了对对象 '****'(数据库 '******',所有者 '***')的 SELECT 权限

    数据库(xxx) --->安全性---->架构---->dbo(属性)--->权限--->添加--->浏览-->public 添加 select 等您需要的权 ...

  6. Anaconda+Tensorflow环境安装与配置

    转载请注明出处:http://www.cnblogs.com/willnote/p/6746499.html Anaconda安装 在清华大学 TUNA 镜像源选择对应的操作系统与所需的Python版 ...

  7. oracle在进行跨库访问时,采用dblink实现

    首先了解下环境:在tnsnames.ora中配置两个数据库别名:test1/test1@11orcl1.tets2/tets2@12orlc2,在orcl1中创建database link来访问orc ...

  8. 保存csv时, 不保留index

    pd.to_csv('your.csv', index=False)

  9. CentOS升级Python2.6到Python2.7并安装pip

    原文:http://ruter.sundaystart.net/2015/12/03/Update-python/ 貌似CentOS 6.X系统默认安装的Python都是2.6版本的?平时使用以及很多 ...

  10. day31 python学习 并发编程之多进程理论部分

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): 二 进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行 ...