3

我能够从 Qt 生成一个 MSVC 项目 (.vcxproj),但该项目不包含应用程序清单文件 (Package.appxmanifest)。我尝试使用 qmake 变量 WINRT_MANIFEST 并确保 CONFIG 包含 embed_manifest_exe 但我一定是误解了一些东西。

我的问题有两部分:

  1. 如何在我的 Qt 项目中定义应用清单?
  2. 这个应用程序清单如何成为 Qt Creator / qmake 生成的 MSVC 项目的一部分?

我在Windows 10上使用Qt Creator 4.7.1Qt 5.11.2 MSVC2017 64bit,并且安装了Visual Studio 2017 Community

我已经尝试过的

构建 MSCV 项目

基于Qt for WinRT 文档和 Qt 社区的帮助,我运行以下命令(通过QMAKE_POST_LINK,在我的 中设置.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。

在 Windows 应用程序清单上阅读 Qt 文档

Windows 部署的 Qt 文档 > 清单文件

部署使用 Visual Studio 编译的应用程序时,需要执行一些额外的步骤。首先,我们需要复制链接应用程序时创建的清单文件。... 从 Qt 4.1.3 开始,以下 CONFIG 选项可用于嵌入清单: embed_manifest_dll embed_manifest_exe 默认情况下启用这两个选项。

因此,据我了解,如果启用了 CONFIG 选项embed_manifest_exe(默认情况下),那么在运行 qmake 时应该嵌入清单。

Qmake 变量的 Qt 文档 > WINRT_MANIFEST

指定要传递给应用程序清单的参数。

列出了这些,其中许多具有默认值。

那么为什么没有生成应用清单呢?即使我自己没有指定任何内容,当然 和 的组合WINRT_MANIFEST应该CONFIG contains embed_manifest_exe意味着应该嵌入默认清单。

我也尝试过设置WINRT_MANIFEST属性(例如WINRT_MANIFEST.publisher),我尝试过创建自己的 Manifest.xml 并进行设置WINRT_MANIFEST=Manifest.xml.,但这并没有什么区别。

4

1 回答 1

2

该解决方案非常简单且“显而易见”,但正如文档中未提及的那样,我没有意识到它的存在。

问题在这里:

我在 Windows 10 上使用 Qt Creator 4.7.1、Qt 5.11.2 MSVC2017 64bit并且安装了 Visual Studio 2017 Community。

应用清单由使用 WinRT(例如 Windows 应用商店应用)的通用 Windows 平台 (UWP) 应用使用。Qt 有一套不同的构建工具包。例如用于 UWP 32 位 (MSVC 2017) 的 Qt 5.11.2。这些使用mkspecs启动winrt-并在维护工具/安装程序中显示为UWP x86/64 (MSVC 2017)

当使用其中一个工具包时,使用默认的 CONFIG 设置embed_manifest_exe,您将获得一个带有默认清单的 Visual Studio 项目。

要覆盖默认值,请在 .pro 中指定属性,例如WINRT_MANIFEST.publisher,或创建单独的清单文件并设置WINRT_MANIFEST=path-to-manifest-file. 如果执行后者,假设您的清单文件是与最终 Package.appxmanifest 格式相同的 XML 文件,那么您还需要WINRT_MANIFEST.CONFIG += verbatim.

于 2018-10-29T08:52:31.863 回答