(当前最新版本4.24)
UE4其实是有实现对话框打开保存等的相关的功能的,都在‘DesktopPlatform’ Module中..
但是‘DesktopPlatform’ Module属于Developer模块,是无法打包出ship ping程序包的...
会报错:
所以想在生产环境中使用该模块需要自己整改一下Module的(突然想口吐芬芳~)
------------------------------------------------------------------------------------------------
整理步骤记录:
在Engine\Source\Developer 找到DesktopPlatform和SlateFileDialogs(DesktopPlatform的依赖,也是属于Developer)文件夹..
然后将其复制粘贴到自己Project(插件里也可以)的Source中..
再修改掉DesktopPlatform和SlateFileDialogs的Module名称并builds装载即可(防止模块重名,不好区分),例如改成DesktopPlatformEx和SlateFileDialogsEx
需要注意一下Build.cs 的PrivateIncludePaths路径
------------------------------------------------------------------------------------------------
DesktopPlatform模块的简单使用示例(打开文件对话框):
FString UCommonBPLibrary::OpenFileDialog() { void* ParentWindowPtr = FSlateApplication::Get().GetActiveTopLevelWindow()->GetNativeWindow()->GetOSWindowHandle(); IDesktopPlatform* DesktopPlatform = FDesktopPlatformModuleEx::Get(); FJsonSerializableArray OutFileNames; if (DesktopPlatform) { EFileDialogFlags::Type SelectionFlag = EFileDialogFlags::None; //A value of 0 represents single file selection while a value of 1 represents multiple file selection DesktopPlatform->OpenFileDialog( ParentWindowPtr, TEXT( "选取一张图片" ), TEXT( "/" ), TEXT( "" ), TEXT( "(Image Files)|*.BMP;*.JPG;*.PNG;*.JPEG;)" ), SelectionFlag , OutFileNames ); } if (OutFileNames.Num() > 0) { return FString (OutFileNames[0]); } else { return TEXT(""); } } TArray<FString> UCommonBPLibrary::OpenFileDialogMultiple() { TArray<FString> ret_arr; void* ParentWindowPtr = FSlateApplication::Get().GetActiveTopLevelWindow()->GetNativeWindow()->GetOSWindowHandle(); IDesktopPlatform* DesktopPlatform = FDesktopPlatformModuleEx::Get(); FJsonSerializableArray OutFileNames; if (DesktopPlatform) { EFileDialogFlags::Type SelectionFlag = EFileDialogFlags::Multiple; //A value of 0 represents single file selection while a value of 1 represents multiple file selection DesktopPlatform->OpenFileDialog(ParentWindowPtr, TEXT("选取图片"), TEXT("/"), TEXT(""), TEXT("(Image Files)|*.BMP;*.JPG;*.PNG;*.JPEG;)"), SelectionFlag, OutFileNames); } for (int i = 0; i < OutFileNames.Num(); i++) { ret_arr.Add(FString(OutFileNames[i])); } return ret_arr; }