前言

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

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

操作

  1. 引入模块

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

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

头文件

c++
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