Интеграция QT в движок

По опыту подключения библиотек в движок проще будет переписать на то что есть в движке. Чем крупнее библиотека и больше у нее возможностей тем сложнее подключать и больше конфликтов.

Я дал

ссылку

на документацию как делать.

Опишу в 2 словах, на примере opencv. Движок использует релизный рантайм, дебажную версию можно использовать только если движок собран из сходников, а из лаунчера доступны только shipping и development (оба релиз по сути). Компилятор нужен под виндой студийный, на линуксе/маке clang.

Создана папка в корне проекта ThirdParty в ней папка opencv-4.6.0 а в ней include и lib в lib все нужные lib и dll файлы.

Движок использует свою систему сборки для которой пишутся скрипты на C#, в плане подключения библиотек неудобно, надо все прописывать самому. Вот пример написания этого скрипта (точнее его правки в готовом проекте для каталогов указанных выше для opencv).

Надо добавить в пути поиска пути к заголовкам и библиотекам, а так же указать все lib файлы для линковки и внезапно все dll файлы для загрузки (без этого он их грузить не будет).

C#Выделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

using System.IO;
using UnrealBuildTool;
 
public class testcv : ModuleRules
{
    public testcv(ReadOnlyTargetRules target) : base(target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    
        PublicDependencyModuleNames.AddRange(new[] { "Core", "CoreUObject", "Engine", "InputCore" });
 
        PrivateDependencyModuleNames.AddRange(new string[] {  });
 
        var includesPath = Path.Combine(ThirdPartyPath, "opencv-4.6.0", "include");
        PublicIncludePaths.Add(includesPath);
        if (Target.Platform == UnrealTargetPlatform.Win64)
        {
            var librariesPath = Path.Combine(ThirdPartyPath, "opencv-4.6.0", "lib");
            PublicAdditionalLibraries.Add(Path.Combine(librariesPath, "opencv_world460.lib"));
            PublicDelayLoadDLLs.Add("opencv_world460.dll");
            PublicDefinitions.Add("WITH_OPENCV_BINDING=1");
        }
    }
    private string ModulePath => ModuleDirectory;
 
    private string ThirdPartyPath => Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/"));
}

И последнее все нужные dll надо руками копировать к бинарникам игры, в случае запуска в редакторе это в корне проекта каталог Binaries\Win64

Если дублируются библиотеки, то движок будет просто зависать/вылетать при использовании библиотеки без каких либо указаний на ошибки и причины. В случае конфликта имен надо редактировать и пересобирать саму библиотеку.