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

news2024/9/21 3:17:41

一、前言

        在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.coloradmin.cn/o/1312136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

老杨说运维 | 年末大盘点!擎创CEO实时盘点运维大干货,不容错过

2023年即将走到尾声&#xff0c;对于擎创而言&#xff0c;这一年是颇具成长和成就的一年。我们庆幸获得了更多客户的信任&#xff0c;也为他们达到下一个运维阶段提供了充足的助力。 越多的实践就会带来越多新的理解和可优化的经验。这一年来&#xff0c;擎创在运维数据治理、智…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍&#xff0c;从本节开始&#xff0c;将正式学习PID控制的相关知识&#xff0c;将会从基本的PID公式概念解释&#xff0c;再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

Tableau进阶--Tableau数据故事慧(20)解构Tableau的绘图逻辑

官网介绍 官网连接如下&#xff1a; https://www.tableau.com/zh-cn tableau的产品包括如下&#xff1a; 参考:https://zhuanlan.zhihu.com/p/341882097 Tableau是功能强大、灵活且安全些很高的端到端的数据分析平台&#xff0c;它提供了从数据准备、连接、分析、协作到查阅…

【MATLAB】数据拟合第10期-二阶多项式的局部加权回归拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 二阶多项式局部加权回归拟合算法是一种用于回归分析的方法&#xff0c;主要通过局部加权线性回归模型来实现。以下是对二阶多项式局部加权回归拟合算法的介绍&#xff1a; 局部加权线性回…

C# OpenCvSharp DNN 部署YOLOV6目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN 部署YOLOV6目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;image_arrays tensor&#xff1a;Float[1, 3, 640, 640] -------------------------------------------------------------…

搭建个人智能家居 开篇(搭建Home Assistant)

搭建个人智能家居 开篇&#xff08;搭建Home Assistant&#xff09; 前言Home Assistant搭建Home AssistantUbuntu系统搭建Windows系统搭建VM安装方法VirtualBox安装方法&#xff1a; 配置Home Assistant控制页面 前言 随着科技的进步、发展&#xff0c;物联网给我们的生活带来…

Axure的安装及界面基本功能介绍

目录 一. Axure概述 二. Axure安装 2.1 安装包下载 2.2 安装步骤 三. Axure功能介绍​ 3.1 工具栏介绍 3.1.1 复制&#xff0c;剪切及粘贴 3.1.2 选择模式和连接 3.1.3 插入形状 3.1.4 点&#xff08;编辑控点&#xff09; 3.1.5 置顶和置底 3.1.6 组合和取消组合 …

双向无线功率传输系统MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 初级侧转换器通过双向 AC/DC 转换器从电网获取电力&#xff0c;并由直流线电压 Vin 供电&#xff0c;而拾波侧被视为连接到 EV&#xff0c;并由连接到任一存储的单独直流源 Vout 表示或…

express 下搞一个 websocket 长连接

安装模块 npm i express npm i express-ws 新建文件app.js 先安排源码 监听端口 7777 var express require(express) var app express() require(express-ws)(app)var port 7777 var clientObject {} app.ws(/, (client, req) > {// 连接var key req.socket.re…

TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)

文章目录 枚举 联合类型 函数_基础 函数_参数说明 类的概念 类的创建 枚举 枚举&#xff08;Enum&#xff09;类型用于取值被限定在一定范围内的场景&#xff0c;比如一周只能有七天&#xff0c;颜色限定为红绿蓝等 枚举例子 枚举使用 enum 关键字来定义 enum Days {…

locust 压测 websocket

* 安装 python 3.8 https://www.python.org/ py --version * 安装 locust pip install locust2.5.1 -i http://pypi.douban.com/simple/ pip install locust2.5.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ locust -V 备注&#xff1a;-i 是切换下载源 * 安装依赖 pip ins…

一篇文章讲透TCP/IP协议

1 OSI 7层参考模型 2 实操连接百度 nc连接百度2次&#xff0c;使用命令netstat -natp查看就会重新连接一次百度 请求百度 3 三次握手、socket 应用层协议控制长连接和短连接 应用层协议->传输控制层&#xff08;TCP UDP&#xff09;->TCP&#xff08; 面向连接&am…

超声波清洗机应该怎样使用?清洁能力强超声波清洗机推荐

其实超声波清洗机使用方法非常简单&#xff0c;只需要将清洁物品放进超声波清洗机内&#xff0c;加入水打开开关即可开始使用&#xff0c;不需要太复杂操作就可以开启清洗&#xff0c;等待个数分钟就可以得到一个干干净净的物品被清洗完毕&#xff01;可见现在科技进步&#xf…

在Node.js中MongoDB更新数据的方法

本文主要介绍在Node.js中MongoDB更新数据的方法。 目录 Node.js中MongoDB更新数据使用原生 MongoDB 驱动程序更新数据使用 Mongoose 更新数据 Node.js中MongoDB更新数据 在Node.js中&#xff0c;可以使用原生的 MongoDB 驱动程序或者使用 Mongoose 来更新 MongoDB 数据。 下面…

Redis设计与实现之字典

目录 一、字典 1、 字典的应用 实现数据库键空间 用作Hash类型键的其中一种底层实现 2、字典的实现 哈希表实现 哈希算法 3、创建新字典 4、添加键值对到字典 5、添加新元素到空白字典 6、添加新键值对时发生碰撞处理 7、添加新键值对时触发了 rehash操作 Note:什么…

SpringIOC之FilterType

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

MySQL事务与MVCC详解

前置概念之事务 在开始MVCC的讨论之前&#xff0c;我们必须了解一些关于事务的概念。 什么是事务 现在我们开发的一个功能需要进行操作多张表&#xff0c;假如我们遇到以下几种情况: 某个逻辑报错数据库连接中断某台服务器突然宕机… 这时候我们数据库执行的操作可能才到一…

从零开始搭建企业管理系统(七):RBAC 之用户管理

RBAC 之用户管理 创建表&#xff08;Entity&#xff09;用户表角色表权限表用户角色表关系注解ManyToMany 角色权限表 接口开发UserControllerUserServiceUserServiceImplUserRepository 问题解决update 更新问题懒加载问题JSON 循环依赖问题 根据上一小结对表的设计&#xff0…

2020年AMC8数学竞赛真题的典型考点和详细解析

从战争中学习战争。 对于2024年1月19日的AMC8竞赛&#xff0c;如何备考和冲刺取得更好的成绩&#xff1f;六分成长建议通过反复刷真题&#xff0c;来掌握AMC8的出题方式、考点和解题思路&#xff0c;并且对自己前期的学习查漏补缺&#xff0c;这是最快的方式。 如何提高刷真题…

5G边缘网关如何助力打造隧道巡检机器人

我国已建成全世界里程最长的公路网、铁路网&#xff0c;是国民经济发展与国家现代化的重要支撑。我国幅员辽阔&#xff0c;地理环境复杂&#xff0c;公路/铁路的延伸也伴随着许多隧道的建设&#xff0c;由于隧道所穿越山体的地质条件复杂&#xff0c;对于隧道的监测、管理与养护…