当前位置: 首页 > news >正文

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文件夹&#xff0c;重命名为ASlateLearning&#xff0c;修改所有文件命名及内部名称。 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申请内存失败&#xff0c;返回NULL 2.2、new申请内存失败&#xff0c;抛出异常 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的缺陷&#xff1a;循环引用问题 3. shared_ptr 和 unique_…...

Linux中安装InfluxDB

什么是InfluxDB InfluxDB是一个开源的时间序列数据库&#xff0c;专为处理时间序列数据而设计。时间序列数据是指带有时间戳的数据点&#xff0c;例如传感器数据、应用程序日志、服务器指标等。InfluxDB 由 InfluxData 公司开发&#xff0c;广泛应用于物联网&#xff08;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来求解位姿&#xff0c;但是我们在实际中常见的都是非平面场景&#xff0c; 此时需要用基础矩阵F求解位姿。 1.函数声明 cv::Mat Initializer::ComputeF21(const vector<cv::Point2f> &vP1, const vector<cv::Point2f>…...

C# 读取多条数据记录导出到 Word标签模板之图片输出改造

目录 应用需求 设计 范例运行环境 配置Office DCOM 实现代码 组件库引入 ​核心代码 调用示例 小结 应用需求 在我的文章《C# 读取多条数据记录导出到 Word 标签模板》里&#xff0c;讲述读取多条数据记录结合 WORD 标签模板输出文件的功能&#xff0c;原有输出图片的…...

NSSCTF web刷题

1 虽然找到了flag,但是我要怎么去改他的代码,让他直接输出flag呢? (好像是要得到他的json代码,这题不让看) 2 wllm应该就是他的密码,进入许可了 意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令&#xff0c;那这就是典型的命令执行&#xff0c;当然&#xff0c…...

对象排序得到方式

java实现 list 排序的方式&#xff0c;有三种 ① 对象实现Comparable 接口&#xff0c;然后代码里直接调用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&#xff1a;解答代码1035&#xff1a;学习成果1047&#xff1a;题目描述&#xff08;成功写出&#xff09;1047&#xff1a;解答代码1047&#xff1a;学习成果1085&#xf…...

Linux:进程间通信之进程池和日志

一、进程池的设计 因为每一次我们要进行进程间通信都需要fork&#xff0c;和操作系统做交互是存在很大成本的&#xff0c;所以我们是不是可以提前fork出几个进程&#xff0c;然后当我们想要使用的时候直接去给他们安排任务&#xff0c;这样就减少了系统调用的次数从而提高了内存…...

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一&#xff1a;是先有HTTP还是先有RPC&…...

Paddle Inference部署推理(十二)

十二&#xff1a;Paddle Inference推理 &#xff08;python&#xff09;API详解 15. PredictorPool 类 PredictorPool 对 Predictor 进行了简单的封装&#xff0c;通过传入 config 和 thread 的数目来完成初始化&#xff0c;在每个线程中&#xff0c;根据自己的线程 id 直接从…...

外观模式 (Facade Pattern)

外观模式 (Facade Pattern) 外观模式是一种 结构型设计模式&#xff0c;通过为子系统中的一组接口提供一个统一的高层接口&#xff0c;简化了子系统的使用&#xff0c;让复杂系统更易于访问。 原理 核心思想&#xff1a; 提供一个 统一的接口 来访问子系统中的多个接口&#…...

人工智能-深度学习-Torch框架-手动构建回归流程

from sklearn.datasets import make_regression import math import random import torch from sklearn.datasets import make_regression: 导入make_regression函数&#xff0c;用于生成回归数据集。 import math: 导入math模块&#xff0c;用于进行数学计算&#xff0c;例如…...

SpringBoot源码解析(五):准备应用环境

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…...

MySQL面试-1

InnoDB中ACID的实现 先说一下原子性是怎么实现的。 事务要么失败&#xff0c;要么成功&#xff0c;不能做一半。聪明的InnoDB&#xff0c;在干活儿之前&#xff0c;先将要做的事情记录到一个叫undo log的日志文件中&#xff0c;如果失败了或者主动rollback&#xff0c;就可以通…...

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含合计行&#xff0c;设置单元格格式&#xff0c;水平居中 垂直居中 public function exportSalary(Request $request){//水平居中 垂直居中$styleArray [alignment > [horizontal > Alignment::HORIZONTAL_CENTER,vertical > Alignment::VERTICAL_CE…...

RabbitMQ 之 死信队列

一、死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理 解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c;consumer 从 queue 取出消息进行…...

别再只卷CNN了!用强化学习(RL)给YOLOv5打个辅助,实现工业零件精准定位(附PyTorch代码)

强化学习与YOLOv5的协同优化&#xff1a;工业零件精准定位实战指南 工业质检领域对目标检测的精度要求近乎苛刻——0.1毫米的定位偏差可能导致整个批次的报废。当传统YOLOv5在复杂场景下遇到瓶颈时&#xff0c;强化学习(RL)的决策能力可以成为突破精度天花板的关键辅助。本文将…...

Eino:Agent的LLM抽象

拨开迷雾看本质&#xff1a;从零推导 ChatModelAgent&#xff08;模型适配层与 Agent 运行时&#xff09; 在 react.md 里看到的是 “ReAct 作为范式” 的推导&#xff1b;而本篇把视角切到 chatmodel.go 作为工程实现&#xff1a;它不只是“为了 ReAct 画图”&#xff0c;更是…...

基于RIME-CNN-LSSVM回归模型的优化与预测应用——以MATLAB环境为例

RIME-CNN-LSSVM回归 基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测(可以更换为分类/单、多变量时序预测/回归&#xff0c;前私我)&#xff0c;Matlab代码&#xff0c;可直接运行&#xff0c;适合小白新手 程序已经调试好&#xff0c;无需更改…...

MATLAB伪彩色增强实战:从灰度分层到频域处理的完整指南

1. 伪彩色增强技术入门指南 第一次接触伪彩色增强是在研究生课题中&#xff0c;当时需要分析一批医学X光片。盯着那些灰蒙蒙的片子看了三天后&#xff0c;我突然意识到&#xff1a;人眼对色彩差异的敏感度&#xff0c;确实远超对灰度变化的感知。这就是伪彩色技术的核心价值——…...

多模态扩展:OpenClaw结合Qwen3.5-4B-Claude处理截图信息

多模态扩展&#xff1a;OpenClaw结合Qwen3.5-4B-Claude处理截图信息 1. 为什么需要多模态能力 作为一个长期依赖文本交互的技术爱好者&#xff0c;我最初对OpenClaw的理解停留在"能通过自然语言控制电脑的AI助手"层面。直到上个月需要处理大量产品截图中的文字信息…...

RTX4090D大模型推理专用镜像体验:Qwen-Image预装环境,一键启动图文对话

RTX4090D大模型推理专用镜像体验&#xff1a;Qwen-Image预装环境&#xff0c;一键启动图文对话 1. 镜像概述与核心优势 1.1 为什么选择专用镜像 在本地部署大语言模型时&#xff0c;环境配置往往是最耗时的环节。以Qwen-VL这样的视觉语言模型为例&#xff0c;需要处理CUDA版…...

从草图到文档:我用这5个Miro/PlantUML模板,高效搞定团队架构设计评审

从草图到文档&#xff1a;5个高效架构设计模板与团队协作实战指南 在敏捷开发环境中&#xff0c;架构设计往往陷入两难困境——既要快速响应需求变化&#xff0c;又要保证设计文档的准确性与可维护性。Tech Lead们经常面临这样的场景&#xff1a;在白板前与团队激情讨论出的架构…...

OpenClaw多环境部署:GLM-4.7-Flash开发与生产配置

OpenClaw多环境部署&#xff1a;GLM-4.7-Flash开发与生产配置 1. 为什么需要区分开发与生产环境 去年我在尝试用OpenClaw自动化处理公司内部文档时&#xff0c;踩过一个典型的坑&#xff1a;直接在开发机上配置的生产环境参数&#xff0c;导致测试脚本误删了正式服务器上的文…...

【vue2+onlyoffice】从零搭建文档预览与协同编辑环境

1. OnlyOffice基础认知与版本选择 第一次接触OnlyOffice时&#xff0c;我盯着官网琳琅满目的版本说明发了半小时呆。这就像去买车&#xff0c;销售给你介绍基础版、豪华版、旗舰版&#xff0c;每个版本都说着"更适合企业需求"的套话。经过三个项目的实战验证&#xf…...

GDAL:Windows环境下的高效安装与基础配置指南

1. Windows环境下GDAL安装全攻略 第一次接触GDAL时&#xff0c;我也被官网上密密麻麻的下载选项搞得头晕眼花。作为地理空间数据处理领域的"瑞士军刀"&#xff0c;GDAL确实功能强大&#xff0c;但在Windows平台上的安装过程却让不少新手望而却步。别担心&#xff0c;…...