UE4笔记-系统对话框相关功能记录和使用方法(打开/保存文件对话框系统对话框等等...)

(当前最新版本4.24)

UE4其实是有实现对话框打开保存等的相关的功能的,都在‘DesktopPlatform’ Module中..

但是‘DesktopPlatform’ Module属于Developer模块,是无法打包出ship ping程序包的...

会报错:

  Error:Missing precompiled manifest for 'DesktopPlatform'

 

 

所以想在生产环境中使用该模块需要自己整改一下Module的(突然想口吐芬芳~)

------------------------------------------------------------------------------------------------

整理步骤记录:

在EngineSourceDeveloper 找到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;
}
原文地址:https://www.cnblogs.com/linqing/p/12654996.html