Как создать проект Visual Studio с манифестом приложения из Qt? - PullRequest
0 голосов
/ 25 октября 2018

Я могу сгенерировать проект MSVC (.vcxproj) из Qt, но проект не содержит файл манифеста приложения (Package.appxmanifest).Я попытался использовать переменную qmake WINRT_MANIFEST и убедиться, что CONFIG включает embed_manifest_exe, но я должен что-то неправильно понять.

Мой вопрос состоит из 2 частей:

  1. Как определить манифест приложенияв моем проекте Qt?
  2. Как манифест этого приложения может стать частью проекта MSVC, созданного Qt Creator / qmake?

Я использую Qt Creator 4.7.1 , Qt 5.11.2 MSVC2017 64bit , на Windows 10 и у меня Visual Studio 2017 Community установлено.

Что я имеюуже попробовал

Сборка проекта MSCV

На основе документации Qt для WinRT и помощи сообщества Qt, я запускаю следующее (через QMAKE_POST_LINK, установите вmy .pro):

windeployqt --release --compiler-runtime --qmldir path-to-my-qml-files
qmake -tp vc path-to-my-.pro -o path-to-build-folder/target-name.vcxproj CONFIG+=release

Они успешно создают проект MSVC, а папка выпуска содержит все библиотеки, необходимые для развертывания, и файл vcredist_xxx.exe.

Чтение документации Qt в приложении Windowsманифест

Документация Qt для развертывания Windows> Файлы манифеста :

При развертывании приложения, скомпилированного с Visual Studio, необходимо предпринять некоторые дополнительные шаги.Во-первых, нам нужно скопировать файл манифеста, созданный при связывании приложения.... Начиная с Qt 4.1.3, для встраивания манифестов доступны следующие опции CONFIG: embed_manifest_dll embed_manifest_exe Обе опции включены по умолчанию.

Итак, насколько я понимаю, если опция CONFIGembed_manifest_exe включено, что по умолчанию, тогда манифест должен быть встроен при запуске qmake.

Документация Qt для переменных Qmake> WINRT_MANIFEST :

Указывает параметры для передачи в манифест приложения.

Они перечислены, многие из которых имеют значения по умолчанию.

Так почему же не генерируется манифест приложения??Даже если я сам ничего не указываю, конечно, комбинация WINRT_MANIFEST и CONFIG contains embed_manifest_exe должна означать, что должен быть встроен манифест по умолчанию.

Я также попытался установить свойства WINRT_MANIFEST (например, * 1064).*) и я попытался создать свой собственный Manifest.xml и установить WINRT_MANIFEST=Manifest.xml. Но это не имеет значения.

1 Ответ

0 голосов
/ 29 октября 2018

Решение очень простое и "очевидное", но, поскольку оно не упомянуто в документации, я не понял, что оно существует.

Проблема здесь:

Я используюQt Creator 4.7.1, Qt 5.11.2 MSVC2017 64bit , на Windows 10 и у меня установлено Visual Studio 2017 Community.

Манифест приложения используется универсальной платформой Windows (Приложения UWP), использующие WinRT (например, приложения Магазина Windows).У Qt есть другой набор сборочных комплектов для них.Например, Qt 5.11.2 для 32-битного UWP (MSVC 2017) .В них используется mkspecs, начиная с winrt-, и они отображаются в Инструменте обслуживания / установщике как UWP x86 / 64 (MSVC 2017) .

При использовании одного из этих комплектов со значением по умолчаниюЕсли параметр CONFIG embed_manifest_exe, вы получите проект Visual Studio с манифестом по умолчанию.

Чтобы переопределить значения по умолчанию, либо укажите атрибуты в .pro, например, WINRT_MANIFEST.publisher, либо создайте отдельный файл манифеста и установитеWINRT_MANIFEST=path-to-manifest-file.Если вы делаете последнее, предполагая, что ваш файл манифеста является файлом XML той же формы, что и финальный Package.appxmanifest, то вам также необходимо WINRT_MANIFEST.CONFIG += verbatim.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...