UE5 slate BlankProgram独立程序系列

server/2024/11/26 21:11:54/

源码版Engine\Source\Programs\中copy BlankProgram文件夹,重命名为ASlateLearning,修改所有文件命名及内部名称。

ASlateLearning.Target.cs

// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;
using System.Collections.Generic;[SupportedPlatforms(UnrealPlatformClass.All)]
public class ASlateLearningTarget : TargetRules
{public ASlateLearningTarget(TargetInfo Target) : base(Target){Type = TargetType.Program;IncludeOrderVersion = EngineIncludeOrderVersion.Latest;LinkType = TargetLinkType.Monolithic;LaunchModuleName = "ASlateLearning";bBuildDeveloperTools = false;bool bDebugOrDevelopment = Target.Configuration == UnrealTargetConfiguration.Debug || Target.Configuration == UnrealTargetConfiguration.Development;//bBuildWithEditorOnlyData = Target.Platform.IsInGroup(UnrealPlatformGroup.Desktop) && bDebugOrDevelopment;bBuildWithEditorOnlyData = true;bCompileAgainstEngine = false;bCompileAgainstCoreUObject = true;bCompileAgainstApplicationCore = true;bCompileICU = false;bIsBuildingConsoleApplication = true;}
}

ASlateLearning.Build.cs

// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class ASlateLearning : ModuleRules
{public ASlateLearning(ReadOnlyTargetRules Target) : base(Target){PublicIncludePaths.Add("Runtime/Launch/Public");PrivateIncludePaths.Add("Runtime/Launch/Private");PrivateDependencyModuleNames.AddRange(new string[]{"AppFramework","Core","ApplicationCore","Projects","Slate","SlateCore","StandaloneRenderer",});}
}

 ASlateLearning.cpp

// Copyright Epic Games, Inc. All Rights Reserved.#include "ASlateLearning.h"#include "RequiredProgramMainCPPInclude.h"
#include "StandaloneRenderer.h"DEFINE_LOG_CATEGORY_STATIC(LogASlateLearning, Log, All);IMPLEMENT_APPLICATION(LogASlateLearning, "ASlateLearning");INT32_MAIN_INT32_ARGC_TCHAR_ARGV()
{GEngineLoop.PreInit(ArgC, ArgV);FSlateApplication::InitializeAsStandaloneApplication(GetStandardStandaloneRenderer());FSlateApplication::InitHighDPI(true);const TSharedPtr<SWindow> MainWindow = SNew(SWindow).ClientSize(FVector2D(800, 600));FSlateApplication::Get().AddWindow(MainWindow.ToSharedRef());while (!IsEngineExitRequested()){BeginExitIfRequested();FSlateApplication::Get().PumpMessages();FSlateApplication::Get().Tick();}FEngineLoop::AppExit();return 0;
}

运行后会出现创建的窗口,后面继续扩展

// Copyright Epic Games, Inc. All Rights Reserved.#include "ASlateLearning.h"#include "RequiredProgramMainCPPInclude.h"
#include "StandaloneRenderer.h"DEFINE_LOG_CATEGORY_STATIC(LogASlateLearning, Log, All);IMPLEMENT_APPLICATION(LogASlateLearning, "ASlateLearning");INT32_MAIN_INT32_ARGC_TCHAR_ARGV()
{GEngineLoop.PreInit(ArgC, ArgV);FSlateApplication::InitializeAsStandaloneApplication(GetStandardStandaloneRenderer());FSlateApplication::InitHighDPI(true);const TSharedPtr<SWindow> MainWindow = SNew(SWindow).ClientSize(FVector2D(800, 600))[SNew(SHorizontalBox) + SHorizontalBox::Slot()[SNew(SButton).Text(NSLOCTEXT("L10N", "Key", "Button Content"))]];FSlateApplication::Get().AddWindow(MainWindow.ToSharedRef());while (!IsEngineExitRequested()){BeginExitIfRequested();FSlateApplication::Get().PumpMessages();FSlateApplication::Get().Tick();}FEngineLoop::AppExit();return 0;
}

运行后窗口样式,button太大因为Slot默认的对其策略是HAlign::Fill,VAlign::Fill,调整后的这部分代码应该是

 使用SOverlay::FOverlaySlot* Slot;个Slot的指针,用.Expose(Slot)获取指针,Expose方法填入一个插槽指针并将其返回,此后,我们通过APi可以获得一个SWidget的引用,此时的代码应该是这样了

// Copyright Epic Games, Inc. All Rights Reserved.#include "ASlateLearning.h"#include "RequiredProgramMainCPPInclude.h"
#include "StandaloneRenderer.h"DEFINE_LOG_CATEGORY_STATIC(LogASlateLearning, Log, All);IMPLEMENT_APPLICATION(LogASlateLearning, "ASlateLearning");INT32_MAIN_INT32_ARGC_TCHAR_ARGV()
{GEngineLoop.PreInit(ArgC, ArgV);FSlateApplication::InitializeAsStandaloneApplication(GetStandardStandaloneRenderer());FSlateApplication::InitHighDPI(true);SOverlay::FOverlaySlot* Slot;const TSharedPtr<SWindow> MainWindow = SNew(SWindow).ClientSize(FVector2D(800, 600))[SNew(SOverlay)+ SOverlay::Slot().HAlign(HAlign_Left).VAlign(VAlign_Top).Expose(Slot)[SNew(SHorizontalBox)+ SHorizontalBox::Slot().HAlign(HAlign_Left).VAlign(VAlign_Top)[SNew(SButton).Text(NSLOCTEXT("L10N", "Key", "Button Content"))]]];SWidget& slotwidget = Slot->GetWidget().Get();SHorizontalBox& HorizontalBox = static_cast<SHorizontalBox&>(slotwidget);for (int i = 0; i <5;++i){HorizontalBox.AddSlot()[SNew(SHorizontalBox)+ SHorizontalBox::Slot().HAlign(HAlign_Left).VAlign(VAlign_Top)[SNew(SButton).Text(NSLOCTEXT("L10N", "Key", "Button Content"))]];}FSlateApplication::Get().AddWindow(MainWindow.ToSharedRef());while (!IsEngineExitRequested()){BeginExitIfRequested();FSlateApplication::Get().PumpMessages();FSlateApplication::Get().Tick();}FEngineLoop::AppExit();return 0;
}

 运行后的窗口变成了

 可以为每个Button添加一些方法,通过OnClicked_Lambda之类的方法

 


http://www.ppmy.cn/server/145147.html

相关文章

LeetCode235. 二叉搜索树的最近公共祖先

题目描述: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也…

【数据结构】通过对比二叉查找树、平衡二叉树和B树,对MySQL中的B+树讲解

从二叉查找树到B树的演进 通过对比二叉查找树、平衡二叉树、B树和B树&#xff0c;从简单到复杂&#xff0c;逐步帮助理解B树的特点及优势。 1. 二叉查找树&#xff08;Binary Search Tree, BST&#xff09; 二叉查找树是一种简单的树结构&#xff0c;特点是每个节点最多有两个…

单片机结合OpenCV

目录 一、引言 二、单片机结合 OpenCV 的优势 1. 图像识别与处理 2. 目标检测 3. 用户界面开发 4. Linux 在嵌入式系统中的作用 5. 多线程优势 6. 网络编程作用 7. 文件编程功能 三、OpenCV 在单片机上的实现难点 1. 处理能力限制 2. 通信与优化挑战 四、单片机如…

Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程&#xff1a;从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战&#xff1a;豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据&#xff08;略&#xff09; 一般爬虫的基…

Java项目实战II基于微信小程序的图书馆自习室座位预约平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在知识爆炸的时代&#xff0c;图书馆和…

ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案

在金融行业&#xff0c;银行营业厅的安全保卫工作至关重要&#xff0c;它不仅关系到客户资金的安全&#xff0c;也关系到整个银行的信誉和运营效率。随着科技的发展&#xff0c;传统的安全防护措施已经无法满足现代银行对于高效、智能化安全管理的需求。 EasyCVR视频汇聚平台以…

centos7.9搭建k8s集群

环境准备 centos7.9,8G4C 准备工作&#xff1a; 关闭防火墙firewalld、selinux 设置主机名 设置/etc/hosts [rootlocalhost ~]# hostnamectl set-hostname master [rootlocalhost ~]# hostnamectl set-hostname worker1 [rootlocalhost ~]# hostnamectl set-hostname w…

MySQL通过binlog恢复数据

查看记录二进制日志详细信息 SHOW VARIABLES LIKE %log_bin% log_bin 为 ON说明这个参数是开启的&#xff0c;就是说系统是记录了bin log的 log_bin_basename 配置了bin log的文件路径及文件前缀名 log_bin_index 配置了bin log索引文件的路径 查看当前使用日志列表 show …