• 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;
    }
  • 相关阅读:
    数据结构 AVL树
    数据结构 快速排序
    Mybatis 传递多个参数
    数据结构 二叉搜索树
    Java 多线程 ReadWriteLock
    Java 基础 集合框架
    SourceTree安装跳过注册
    【前端部署】阿里云 windows2019服务器用node部署静态项目
    【node开发】node简易服务器一分钟搞定
    【node开发】node.js编写一个接口
  • 原文地址:https://www.cnblogs.com/linqing/p/12654996.html
Copyright © 2020-2023  润新知