虚幻引擎调用本地文件拾取器(FileDialog)
前言
在做一些桌面应用开发中,会需要通过引擎来拾取本地磁盘的文件内容。常规软件中,当需要拾取磁盘内容时,会唤醒系统桌面中的文件拾取器来完成。虚幻引擎中如何来唤醒桌面内容拾取器呢,操作其实非常简单。
操作
- 引入模块
"DesktopPlatform", "Slate", "SlateCore"三个模块是依赖模块,需要引入。
1PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HTTP" });
2PrivateDependencyModuleNames.AddRange(new string[] { "DesktopPlatform", "Slate", "SlateCore" });
- 执行打开窗口的代码
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