You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Qt UWP x32/x64套件构建UWP应用的编译问题

Qt 5.9.3 + CppWinRT: x86/x64编译失败(ARMv7可正常编译)

问题梳理

你目前的情况是:

  • 已从GitHub获取对应Windows SDK 10.0.16299.0的CppWinRT头文件,用于Qt调用UWP API
  • Qt版本为5.9.3,.pro文件已添加头文件路径:INCLUDEPATH += "C:/Users/cobra/Downloads/Downloads Data/cppwinrt/10.0.16299.0"
  • 头文件代码:
#include <winrt/windows.devices.enumeration.h>
#pragma comment(lib, "windowsapp")
using namespace winrt;
using namespace winrt::Windows::Devices::Enumeration;
  • CPP文件代码:
init_apartment(); // 初始化COM环境
DeviceInformationCollection infos = DeviceInformation::FindAllAsync().get();
for (const auto &info : infos) {
    qDebug() << QString::fromWCharArray(info.Name().c_str());
}
  • 核心问题:只有ARMv7套件能编译通过,x86/x64编译时出现大量来自CppWinRT头文件的错误;移除UWP相关代码后,应用可正常编译运行。

可能的原因分析

  1. Qt 5.9.3默认MSVC编译器版本过低
    Qt 5.9.3默认搭配的是MSVC 2015编译器,但CppWinRT 10.0.16299.0依赖C17的特性(比如constexpr、结构化绑定等),MSVC 2015对C17的支持非常有限。ARMv7可能因为编译器的平台特殊处理刚好能绕过部分检查,但x86/x64平台的编译逻辑对标准的校验更严格,所以直接报错。

  2. Windows SDK版本不匹配
    Qt 5.9.3默认关联的Windows SDK版本可能低于10.0.16299.0,导致x86/x64编译时出现头文件定义冲突、缺失UWP API相关声明的问题。

  3. 编译选项未开启C++17支持
    即使你用了支持C17的编译器,Qt项目默认可能没有开启C17编译开关,这会导致CppWinRT的模板代码无法正常编译。

解决方案

1. 升级MSVC编译器工具链

Qt 5.9.3支持MSVC 2017(需要安装对应版本的Qt套件),MSVC 2017 15.7及以上版本完整支持C++17,能满足CppWinRT的编译要求:

  • 安装Visual Studio 2017,确保勾选「C++桌面开发」组件,同时在「单个组件」中选择Windows SDK 10.0.16299.0
  • 打开Qt Creator,进入「工具」->「选项」->「构建和运行」->「Kits」,添加或切换到MSVC 2017 x86/x64的Kit,确保编译器和调试器路径指向Visual Studio 2017的安装目录

2. 明确指定Windows SDK版本和编译宏

在你的.pro文件中添加以下配置,强制使用目标Windows SDK版本,避免Qt默认的旧版本:

# 指定Windows 10 SDK版本(对应10.0.16299.0)
QMAKE_CXXFLAGS += /DWINVER=0x0A00 /D_WIN32_WINNT=0x0A00
QMAKE_LFLAGS += /SUBSYSTEM:WINDOWS,6.0.16299

3. 开启C++17编译支持

在.pro文件中添加C++17编译开关:

CONFIG += c++17

4. 检查并修复Qt Kit配置

  • 确认x86/x64的Kit中,「编译器」选择的是MSVC 2017的对应版本(比如MSVC 2017 32bit或64bit)
  • 确认「Windows SDK」选项选择的是10.0.16299.0,如果没有这个选项,需要重新安装对应SDK

5. 清理缓存后重新构建

编译错误有时来自旧的缓存文件,执行以下步骤:

  • 删除项目的build文件夹
  • 在Qt Creator中点击「清理项目」,然后点击「构建项目」

按照这些步骤操作后,x86/x64平台应该能正常编译通过并调用UWP设备信息API了。

内容的提问来源于stack exchange,提问作者Cobra91151

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:56:58