zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/linqing/p/12654996.html
Copyright © 2011-2022 走看看