虚幻引擎调用本地文件拾取器(FileDialog)

前言

在做一些桌面应用开发中,会需要通过引擎来拾取本地磁盘的文件内容。常规软件中,当需要拾取磁盘内容时,会唤醒系统桌面中的文件拾取器来完成。虚幻引擎中如何来唤醒桌面内容拾取器呢,操作其实非常简单。

虚幻引擎唤醒磁盘文件拾取器

操作

  1. 引入模块

"DesktopPlatform", "Slate", "SlateCore"三个模块是依赖模块,需要引入。

1PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HTTP" });
2PrivateDependencyModuleNames.AddRange(new string[] { "DesktopPlatform", "Slate", "SlateCore" });
  1. 执行打开窗口的代码
 1//获取窗口句柄
 2void* NativeWinHandle = GEngine->GameViewport->GetWindow()->GetNativeWindow()->GetOSWindowHandle();
 3if (NativeWinHandle)
 4{
 5	//获取桌面平台模块对象
 6	IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get();
 7	if (DesktopPlatform)
 8	{
 9		//用来将拾取的资产名称存储到数组中
10		TArray<FString> OutNames;
11		//打开窗口
12		DesktopPlatform->OpenFileDialog(NativeWinHandle, TEXT("打开文件夹"), "d:\\", FString(""), TEXT("Image file|*.png"), 0, OutNames);
13	}
14}

头文件

1#include "DesktopPlatformModule.h"

OpenFileDialog函数参数说明:

  • 父节点窗口句柄
  • 文件拾取器的窗口标题
  • 拾取器默认路径
  • 拾取器默认锁定文件
  • 拾取器的文件类型约束(如留空白,则对类型不做约束
  • 单一文件拾取还是多文件拾取,0单文件拾取,1多文件拾取
  • 拾取完成后将拾取到的内容(路径)存放的数组

说明

关于拾取类型约束

如果希望添加类型约束,按照“描述|类型”格式进行添加,以下是一些举例:

  • 只拾取png类型,“Image File|*.png”(参考上面截图)
  • 拾取png类型和jpg类型,可以使用分号分割,“Image File|*.png;*.jpg”
  • 需要拾取图片类型,文本类型,json类型,“Image File|*.png;*.jpg|Txt File|*.txt|Json File|*.json”

关于调用阻塞

文件拾取器被打开后会阻塞调用线程执行,当用户选择完文件后,会继续执行。

虚幻引擎版本:4.27.2

文章评论