虚幻学习笔记15—C++和UI(一)

一、前言

        在C++可以直接创建按钮、滚轮等UI,并且可以直接绑定并处理响应事件。在创建C++代码后还是需要通过蓝图来显示到应用中,总体来说还是不如直接用蓝图来的方便。

        本文使用的虚幻引擎为5.2.1。

二、实现

2.1、创建UUserWidgetl类型的C++类

        声明两个按钮并创建两个按钮的点击事件处理方法,头文件代码如下,这里只是声明了两个按钮并没有实际创建按钮,需要在后续的蓝图UI中进行绑定。

#pragma once#include "CoreMinimal.h"
#include "Components/Button.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"/****/
UCLASS()
class CHAPTER2_API UMyUserWidget : public UUserWidget
{GENERATED_BODY()public://这里设定的“buttonStart"按钮名称后面创建蓝图类UI中按钮的名称和这个一样UPROPERTY(meta = (BindWidget))UButton* ButtonStart;UPROPERTY(meta = (BindWidget))UButton* ButtonQuit;public:virtual bool Initialize()override;public:UFUNCTION()void BtnClick_Start();UFUNCTION()void BtnClick_Quit();
};

注:在代码里声明两个按钮,其必须在后续的蓝图类中体现,包括名字也要一样,否则会编译错误,甚至编辑器直接崩。

在初始化函数里将按钮的点击进行绑定,同时编写按钮点击事件处理函数的信息,代码如下:

bool UMyUserWidget::Initialize()
{if (!Super::Initialize()){return false;}ButtonStart->OnClicked.AddDynamic(this, &UMyUserWidget::BtnClick_Start);ButtonQuit->OnClicked.AddDynamic(this, &UMyUserWidget::BtnClick_Quit);return true;
}void UMyUserWidget::BtnClick_Start()
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Button Start"));
}void UMyUserWidget::BtnClick_Quit()
{GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Button Quit"));
}

2.2、创建UI蓝图

        这一步和之前直接创建C++的蓝图类不同,如图2.2.1所示,如果点击创建该类的蓝图类的话只会创建了一个蓝图类,它并没有真正的UI元素。

图2.2.1

我们需要的是单独创建一个控件蓝图,然后在其父类设置时选择2.1创建的类。

        在选择父类时需要先创建2.1中生命的两个类,并且一定要名称一致,如图2.2.2所示,按钮或其他控件可以创建多个,但是这两个类型必须有而且名字必须一样,否则在绑定父类时直接导致编

图2.2.2

辑器崩溃,如图2.2.3所示为没有”ButtonStart“按钮的情况下设置父类后直接导致编辑器崩溃

图2.2.3

崩的信息也是提示C++代码中没有这个按钮,然后进行了绑定。当再次打开编辑器的并尝试打开蓝图的情况下,会提示无法打开,或者打开后蓝图的父类回复默认的”用户控件”。并且再在父类中选择时已经找不到之前2.1创建的类了,同时C++类文件中也没有这个类了。需要重新编译C++代码才会再出现

2.3、添加到场景中

        这一步和在蓝图中创建UI并添加到视口的逻辑是一样的,需要在PlayController或者其他的系统管理类中创建2.2中创建的蓝图类,并添加到视口,代码如下,创建的TEXT路径即为2.2中蓝图

#include "Blueprint/UserWidget.h"//需要添加的头文件void AMyPlayerController1::BeginPlay()
{Super::BeginPlay();//这里的参数NULL和表示只是加载到场景中,不会加载到这个类下面UClass* WidgetCalss = LoadClass<UUserWidget>(NULL, TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/BluePrint/UMG_Widget.UMG_Widget_C'"));UUserWidget* MyWidgetClass = nullptr;MyWidgetClass = CreateWidget<UUserWidget>(GetWorld(), WidgetCalss);MyWidgetClass->AddToViewport();}

类的“复制引用”后的路径,同时需要再后面添加“_C”的后缀。

三、总结

3.1、创建C++的按钮变量名称一定要在后续蓝图控件中创建,类型和名称都要一致,否则会编译报错,甚至编辑器崩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/217280.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Peter算法小课堂—简单建模(2)

太戈编程736题 题目描述&#xff1a; 你是一只汪星人&#xff0c;地球毁灭后你回到了汪星&#xff0c;这里每天有n个小时&#xff0c;你需要为自己选择正好连续的m小时作为每天睡眠的时间。从凌晨开始&#xff0c;第i小时内的睡眠质量为xi&#xff0c;请问经过选择后&#xf…

SpringBoot - application.yml 多环境切换解决方案

问题描述 这个问题玩过 SpringCloud 的小伙伴估计会想到用 bootstrap.yml 来解决这个问题。但是如果说为了解决这个问题引入了一堆的 SpringCloud Jar&#xff0c;就感觉杀鸡用牛刀。 于是今天我们想只有 application.yml 自己就可以解决这个问题&#xff0c;如何搞定&#x…

Gin之GORM 查询语句

前期工作可以看之前的&#xff08;连接数据库&#xff1b;以及确定要操作的库&#xff09; Gin之GORM 操作数据库&#xff08;MySQL&#xff09;-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm1001.2014.3001.5502这次我们操作gin库下的另外一个…

AcWing 338. 计数问题

文章目录 题目描述问题分析代码 题目描述 AcWing 338.计数问题 给定两个整数 a a a 和 b b b, 求 a a a 和 b b b中所有数字中0~9的出现次数 数据范围&#xff1a; 0 < a, b < 100000000 输入格式&#xff1a; 输入包含多组测试数据。 每组测试数据占一行&#xff0c;包…

vins_fusion在rviz可视化中vio与global严重不重叠的问题

原因&#xff0c;vio与global没有yaw角度同步&#xff0c;各自为政&#xff0c;两者通过一个变换T维持关系。 看着碍眼&#xff0c;所以打算改了。 之前试过几个方案&#xff0c;比如先跑一次bag&#xff0c;记录VIO与global的后验角度与偏差&#xff0c;写一个程序&#xff0c…

论文阅读《Parameterized Cost Volume for Stereo Matching》

论文地址&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Zeng_Parameterized_Cost_Volume_for_Stereo_Matching_ICCV_2023_paper.pdf 源码地址&#xff1a;https://github.com/jiaxiZeng/Parameterized-Cost-Volume-for-Stereo-Matching 概述 现有的立体匹…

【产品经理】需求池和版本树

在这个人人都是产品经理的时代&#xff0c;每位入行的产品人进阶速度与到达高度各有不同。本文作者结合自身三年产品行业的经历&#xff0c;根据案例拆解产品行业的极简研发过程、需求池、版本树、产品自我优化等相关具体方法论。 一、产品研发的极简过程 1. 产品概述 产品就…

CCF编程能力等级认证GESP—C++2级—20230611

CCF编程能力等级认证GESP—C2级—20230611 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)找素数自幂数判断 答案及解析单选题判断题编程题1编程题2 单选题…

CSS第二天导读

1&#xff0c;Emmet语法 Emmet语法的前身是Zen coding&#xff0c;它使用缩写&#xff0c;来提高html / css 的编写速度&#xff0c;Vscode内部已经集成该语法 1.1&#xff0c;快速生成HTML结构语法 1.想要快速生成多个相同标签&#xff0c;加上*就可以了&#xff0c;比如 d…

智慧灯杆技术应用分析

智慧灯杆是指在传统灯杆的基础上&#xff0c;通过集成多种先进技术实现城市智能化管理的灯杆。智慧灯杆技术应用的分析如下&#xff1a; 照明功能&#xff1a;智慧灯杆可以实现智能调光、时段控制等功能&#xff0c;根据不同的需求自动调节照明亮度&#xff0c;提高照明效果&am…

铭飞CMS list 接口 SQL注入漏洞复现

0x01 产品简介 铭飞CMS是一款基于java开发的一套轻量级开源内容管理系统,铭飞CMS简洁、安全、开源、免费,可运行在Linux、Windows、MacOSX、Solaris等各种平台上,专注为公司企业、个人站长快速建站提供解决方案 0x02 漏洞概述 铭飞CMS在5.2.10版本以前list 接口处存在sql注入…

Axure的动态面板

目录 动态面板 什么是Auxre动态模板 动态模板的步骤 应用场景 实战案例 轮播图 多功能登录界面 主界面左侧菜单栏 动态面板 什么是Auxre动态模板 动态面板是Axure中的一个重要功能&#xff0c;它允许用户创建可交互的页面&#xff0c;并模拟用户与页面的交互。通过添加元素…

Python - 搭建 Flask 服务实现图像、视频修复需求

目录 一.引言 二.服务构建 1.主函数 upload_gif 2.文件接收 3.专属目录 4.图像修复 5.gif2mp4 6.mp42gif 7.图像返回 三.服务测试 1.服务启动 2.服务调用 四.总结 一.引言 前面我们介绍了如何使用 Real-ESRGAN 进行图像增强并在原始格式 jpeg、jpg、mp4 的基础上…

计算机毕业设计 SpringBoot的医院门诊在线挂号系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

计算机网络应用层(期末、考研)

计算机网络总复习链接&#x1f517; 目录 DNS域名服务器域名解析过程分类递归查询&#xff08;给根域名服务器造成的负载过大&#xff0c;实际中几乎不用&#xff09;迭代查询 域名缓存&#xff08;了解即可&#xff09;完整域名解析过程采用UDP服务 FTP控制连接与数据连接 电…

【期末向】“我也曾霸榜各类NLP任务”-bert详解

预训练语言模型 预训练语言模型于 2015 年被首次提出&#xff08;Dai & Le,2015&#xff09;。首先我们要了解一下什么是预训练模型&#xff0c;举个例子&#xff0c;假设我们有大量的维基百科数据&#xff0c;那么我们可以用这部分巨大的数据来训练一个泛化能力很强的模型…

LV.13 D2 开发板启动流程 学习笔记

一、开发板启动过程 EMMC&#xff1a;相当于电脑的外存&#xff0c;断电不丢失 开发板上电后首先运行SOC内部iROM中固化的代码(BL0)&#xff0c;这段代码先对基本的软硬件环境(时钟等...)进行初始化&#xff0c;然后再检测拨码开关位置获取启动方式&#xff0c;然后再将对应存储…

【Python】conda镜像配置,.condarc文件详解,channel镜像

1. conda 环境 安装miniconda即可&#xff0c;Miniconda 安装包可以到 http://mirrors.aliyun.com/anaconda/miniconda/ 下载。 .condarc是conda 应用程序的配置文件&#xff0c;在用户家目录&#xff08;windows&#xff1a;C:\users\username\&#xff09;&#xff0c;用于…

3-分布式存储之Ceph

任务背景 虽然使用了分布式的glusterfs存储, 但是对于爆炸式的数据增长仍然感觉力不从心。对于大数据与云计算等技术的成熟, 存储也需要跟上步伐. 所以这次我们选用对象存储. 任务要求 1, 搭建ceph集群 2, 实现对象存储的应用 任务拆解 1, 了解ceph 2, 搭建ceph集群 3, 了…

智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.差分进化算法4.实验参数设定5.算法结果6.…