UE5 slate BlankProgram独立程序系列
源码版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之类的方法
相关文章:
UE5 slate BlankProgram独立程序系列
源码版Engine\Source\Programs\中copy BlankProgram文件夹,重命名为ASlateLearning,修改所有文件命名及内部名称。 ASlateLearning.Target.cs // Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool; using System.Collections.Ge…...
内存不足引发C++程序闪退崩溃问题的分析与总结
目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败,返回NULL 2.2、new申请内存失败,抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…...
C++ —— 以真我之名 如飞花般绚丽 - 智能指针
目录 1. RAII和智能指针的设计思路 2. C标准库智能指针的使用 2.1 auto_ptr 2.2 unique_ptr 2.3 简单模拟实现auto_ptr和unique_ptr的核心功能 2.4 shared_ptr 2.4.1 make_shared 2.5 weak_ptr 2.6 shared_ptr的缺陷:循环引用问题 3. shared_ptr 和 unique_…...
Linux中安装InfluxDB
什么是InfluxDB InfluxDB是一个开源的时间序列数据库,专为处理时间序列数据而设计。时间序列数据是指带有时间戳的数据点,例如传感器数据、应用程序日志、服务器指标等。InfluxDB 由 InfluxData 公司开发,广泛应用于物联网(IoT&am…...
nginx服务器实现上传文件功能_使用nginx-upload-module模块
目录 conf文件内容如下html文件内容如下上传文件功能展示 conf文件内容如下 #user nobody; worker_processes 1;error_log /usr/logs/error.log; #error_log /usr/logs/error.log notice; #error_log /usr/logs/error.log info;#pid /usr/logs/nginx.pid;events …...
ORB-SLAM2源码学习:Initializer.cc:Initializer::ComputeF21地图初始化——计算基础矩阵
前言 在平面场景我们通过求解单应矩阵H来求解位姿,但是我们在实际中常见的都是非平面场景, 此时需要用基础矩阵F求解位姿。 1.函数声明 cv::Mat Initializer::ComputeF21(const vector<cv::Point2f> &vP1, const vector<cv::Point2f>…...
C# 读取多条数据记录导出到 Word标签模板之图片输出改造
目录 应用需求 设计 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 调用示例 小结 应用需求 在我的文章《C# 读取多条数据记录导出到 Word 标签模板》里,讲述读取多条数据记录结合 WORD 标签模板输出文件的功能,原有输出图片的…...
NSSCTF web刷题
1 虽然找到了flag,但是我要怎么去改他的代码,让他直接输出flag呢? (好像是要得到他的json代码,这题不让看) 2 wllm应该就是他的密码,进入许可了 意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令,那这就是典型的命令执行,当然,…...
对象排序得到方式
java实现 list 排序的方式,有三种 ① 对象实现Comparable 接口,然后代码里直接调用Collections.sort(list) ②使用内部类Comparator ③使用stream.sort 代码如下 实现Comparable接口的实体类 Data public class Student implements Comparable<Stud…...
Day2 洛谷1035+1047+1085+1089+1150+1151
零基础洛谷刷题记录 Day1 2024.11.18 Day2 2024.11.25 文章目录 零基础洛谷刷题记录1035:题目描述1035:解答代码1035:学习成果1047:题目描述(成功写出)1047:解答代码1047:学习成果1085…...
Linux:进程间通信之进程池和日志
一、进程池的设计 因为每一次我们要进行进程间通信都需要fork,和操作系统做交互是存在很大成本的,所以我们是不是可以提前fork出几个进程,然后当我们想要使用的时候直接去给他们安排任务,这样就减少了系统调用的次数从而提高了内存…...
详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?
目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一:是先有HTTP还是先有RPC&…...
Paddle Inference部署推理(十二)
十二:Paddle Inference推理 (python)API详解 15. PredictorPool 类 PredictorPool 对 Predictor 进行了简单的封装,通过传入 config 和 thread 的数目来完成初始化,在每个线程中,根据自己的线程 id 直接从…...
外观模式 (Facade Pattern)
外观模式 (Facade Pattern) 外观模式是一种 结构型设计模式,通过为子系统中的一组接口提供一个统一的高层接口,简化了子系统的使用,让复杂系统更易于访问。 原理 核心思想: 提供一个 统一的接口 来访问子系统中的多个接口&#…...
人工智能-深度学习-Torch框架-手动构建回归流程
from sklearn.datasets import make_regression import math import random import torch from sklearn.datasets import make_regression: 导入make_regression函数,用于生成回归数据集。 import math: 导入math模块,用于进行数学计算,例如…...
SpringBoot源码解析(五):准备应用环境
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
MySQL面试-1
InnoDB中ACID的实现 先说一下原子性是怎么实现的。 事务要么失败,要么成功,不能做一半。聪明的InnoDB,在干活儿之前,先将要做的事情记录到一个叫undo log的日志文件中,如果失败了或者主动rollback,就可以通…...
nginx配置不缓存资源
方法1 location / {index index.html index.htm;add_header Cache-Control no-cache,no-store;try_files $uri $uri/ /index.html;#include mime.types;if ($request_filename ~* .*\.(htm|html)$) {add_header Cache-Control "private, no-store, no-cache, must-revali…...
PHP导出EXCEL含合计行,设置单元格格式
PHP导出EXCEL含合计行,设置单元格格式,水平居中 垂直居中 public function exportSalary(Request $request){//水平居中 垂直居中$styleArray [alignment > [horizontal > Alignment::HORIZONTAL_CENTER,vertical > Alignment::VERTICAL_CE…...
RabbitMQ 之 死信队列
一、死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行…...
别再只盯着data://协议了!详解Nginx日志文件包含漏洞的另类利用与防御
从日志污染到权限沦陷:Nginx文件包含漏洞的攻防全景解析 当Web服务器的日志文件成为攻击者的跳板,一场关于权限与防御的暗战便悄然展开。Nginx作为现代互联网基础设施的核心组件,其日志机制在记录访问轨迹的同时,也可能成为系统安…...
onnx之优化器
之前的OpenPPL有个章节讲到过优化器,onnx里面也有个优化器,相关介绍如下一、优化器的本质ONNX Core Optimizer 是在图级别工作的,与EP(Execution Provider)无关。textONNX模型(计算图)→ Optimi…...
App启动总览
特征 / 步骤 冷启动 (Cold Start) 温启动 (Warm Start) 热启动 (Hot Start) 速度 最慢 🐢 中等 🏃 最快 🚀 进程创建 ✅ 需要 ❌ 跳过 ❌ 跳过 Application.onCreate() ✅ 需要调用 ❌ 跳过 ❌ 跳过 Activity.onCreate() ✅ 需要调用 ✅ 需要调用 ❌ 跳过 Activity.onSta…...
不止于JWT:用FastAPI的Depends实现细粒度权限控制
📌 本文摘要 很多FastAPI初学者把JWT认证当成权限控制的终点,结果上线后频繁出现越权操作。本文通过一个真实的“多租户Todo”案例,带你从0搭建基于角色的访问控制(RBAC)和数据级权限(ABAC)&…...
高效构建智能媒体库:MetaTube插件全方位应用指南
高效构建智能媒体库:MetaTube插件全方位应用指南 【免费下载链接】jellyfin-plugin-metatube MetaTube Plugin for Jellyfin/Emby 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube MetaTube是一款专为Jellyfin和Emby设计的开源元数据…...
Legacy-iOS-Kit系统降级全指南:让老旧iOS设备重获新生
Legacy-iOS-Kit系统降级全指南:让老旧iOS设备重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 一、问…...
3个核心功能解决Windows 11系统问题:Win11Debloat优化工具深度评测
3个核心功能解决Windows 11系统问题:Win11Debloat优化工具深度评测 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更…...
Engram:解锁AI潜能,系统优化新高度!
Engram是一种基于LLM的智能体研究者架构,旨在解决系统优化中AI的两个关键局限:进化邻域偏差和连贯性上限。通过将长时程探索与单一上下文窗口解耦,Engram组织一系列智能体迭代设计、测试和分析机制。每次运行结束时,智能体将代码快…...
熟悉C#如何转TypeScript——SDK与包引用的主要区别
SDK与包引用的主要区别 在 TypeScript 开发中,包引用(import/require)并不是 SDK 的集合,而是模块化代码库的引用方式。以下是详细解释:核心概念对比特性TypeScript/JavaScript (npm).NET Core SDK包管理工具npm / yar…...
5分钟掌握防撤回神器:让重要消息无处可逃
5分钟掌握防撤回神器:让重要消息无处可逃 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/GitHub_Tre…...
