HarmonyOS鸿蒙Next中如何在系统上运行Qt应用程序?

HarmonyOS鸿蒙Next中如何在系统上运行Qt应用程序?

  1. 可以在鸿蒙系统上安装Qt开发环境吗?
  2. 如果无法鸿蒙系统上安装Qt开发环境,那么如何使开发好的Qt程序在鸿蒙系统上运行?
8 回复

可以在鸿蒙系统上安装Qt开发环境

一、前置条件

  1. 申请HarmonyOS Qt使用权限:
    • 商业版Qt:请咨询Qt公司申请权限。
    • 开源版Qt:无需申请权限。
  2. License申请:
    • 商业版Qt:开发者需要找Qt公司申请License。
    • 开源版Qt:无需申请License。
  3. 源码下载地址:

二、配置开发环境

下面以商业版Qt(5.12.12)和开源版Qt(Qt 5.15.12),为例进行环境配置。

1.下载Qt源码:

  (1)商业版Qt:

  • 访问并登录商业版Qt官网,并点击右上角的“设置”,打开设置页面。
  • 点击“设置”->“HTTP凭证”->“生成新密码”生成新密码。保存密码以便稍后使用git clone使用。
  • 访问商业版Qt源码仓并克隆git仓库地址,git命令示例:git clone "https://xxxxxx@codereview.qt-project.org/a/qt/tqtc-qt5"
  • 进入tqtc-qt5文件夹:
    cd tqtc-qt5
    
  • 查看所有的tag:
    git tag
    
  • 切换到该tag分支:
    git checkout v5.12.12-harmonyos-20250610
    
  • 下载Qt源码:
    git submodule update --init --recursive
    

(2)开源版Qt:

  • 下载开源Qt编译脚本工程:
    git clone https://gitcode.com/qtforohos/Build.git
    
  • 安装依赖: 在项目根目录执行以下命令(获取的依赖包括requests、GitPython、questionary、rich、py7zr):
    python -m pip install -r requirements.txt
    
  • 下载Qt源码:
    # 初始化仓库并应用补丁(首次执行会创建/询问用户配置)
    python build-qt-ohos.py --init
    # 检查并准备开发环境(Windows 会自动下载 Perl/MinGW;任何平台会下载 OHOS SDK native 包)
    python build-qt-ohos.py --env_check
    

2.配置编译Qt源码环境:

  • 安装DevEco Studio,安装成功后会自动安装native包,路径默认为:..\sdk\default\openharmony\native。 注意:安装路径不能有中文,目录名称不能有空格!
  • 下载安装MinGW工具链
  • 下载安装Strawberry Perl for Windows
  • 将MinGW和Perl路径添加到PATH环境变量中
  • 在系统环境变量中添加MINGW_ROOTPERL_ROOT
  • 安装Python 3.10以上版本,并配置Path环境变量:

3.编译Qt源码:

(1)商业版Qt:

  • 在下载Qt源码目录(tqtc-qt5),创建一个并行的build目录(不要设置build目录是Qt仓库目录的子目录)
  • 在build目录下打开命令提示符(CMD工具),设置以下环境变量,其中NATIVE_OHOS_SDK为DevEco Studio安装时的native包路径,QT5_ROOT_DIR为下载Qt源码的路径:
    SET NATIVE_OHOS_SDK=D:\soft_ware\DevecoStudio\DevEco_Studio\sdk\default\openharmony\native
    SET OHOS_SDK_SYSROOT=%NATIVE_OHOS_SDK%\sysroot
    SET LLVM_INSTALL_DIR=%NATIVE_OHOS_SDK%\llvm
    SET QT5_ROOT_DIR=D:\QT\business\tqtc-qt5
    
  • 在同一个CMD窗口,设置部分跳过的子模块变量:
    SET QT_SKIPS=-skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtdocgallery -skip qtfeedback -skip qtgamepad -skip qtgraphicaleffects -skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpim -skip qtpurchasing -skip qtqa -skip qtremoteobjects -skip qtrepotools -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsystems -skip qttools -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -no-dbus -skip doc
    
  • 运行configure命令,需要修改设置-extprefix为Qt安装路径:
    call ..\tqtc-qt5\configure.bat -v -xplatform ohos-clang -device-option CROSS_COMPILE=%LLVM_INSTALL_DIR%\bin -prefix /data/storage/el1/bundle/libs/arm64 -extprefix D:\QT\business\qt-5.12.12-ohos -opensource -confirm-license -debug -no-use-gold-linker %QT_SKIPS% -nomake tests -nomake examples -no-gcc-sysroot -opengles3 -c++std c++14 -ohos-arch arm64-v8a
    
  • 注意:如果需要openssl的相关特性,请执行configure命令的时候添加以下选项:
    -openssl-runtime -I%QT_SOURCE_DIR_OPENSSL% -ssl
    
    其中变量%QT_SOURCE_DIR_OPENSSL%代表openssl头文件的路径。
  • 配置成功后,使用mingw32-make进行构建:
    mingw32-make -j8
    
  • 使用以下命令开始安装,注意安装到最后不能有报错:
    mingw32-make install
    
  • 编译成功后,会在指定的Qt安装目录下的bin目录下生成qmake等文件

(2)开源版Qt:

  • 一条命令完成配置、编译、安装,并打包产物:
  • 编译后的产物目录参考:
    # Qt 源码目录:{working_dir}/qt5
    # 构建目录:{working_dir}/qt5/build/{release|debug}
    # 安装前缀(prefix):{working_dir}/output/Qt{QtVer}-ohos{OHOSVer}-{ABI}
    # 打包位置:{working_dir}/output/Qt{QtVer}_OHOS{OHOSVer}_{ABI}_{os}.{zip|tar.gz}
      Windows 打包为 .zip
      Linux/macOS 打包为 .tar.gz
    # 示例:output/Qt5.15.12-ohos15-arm64-v8a/ 与 output/Qt5.15.12_OHOS15_arm64-v8a_windows.zip
    

4.配置QtCreator环境:

配置Qt版本: 进入`编辑->Preferences->构建套件->Qt版本,新增Qt版本配置。将名称设置为Qt %{Qt:Version}(qt-5.12.12-ohos)。qmake path选择-extprefix设置的安装路径下的bin(比如:D:\QT\business\qt-5.12.12-ohos\bin)

配置编译器: 进入编辑->Preferences->构建套件->编译器,新增编译器配置(Custom)。将C compiler pathC++ compiler path设置为DevEco Studio\native路径下的clang(如:D:\soft_ware\DevEco_Studio\sdk\default\openharmony\native\llvm\bin\clang.exe)。 Make path设置为MinGW安装路径下的mingw32-make(如:D:\soft_ware\MinGW\llvm-mingw-20250613-ucrt-x86_64\bin\mingw32-make.exe)。 ABI需要更改为:arm-linux-generic-elf-64bit。

构建套件配置: 转到构建套件选项卡,添加构建套件。 修改编译器为上面配置的编译器配置(ohos-9)。 修改Qt版本为上面配置的Qt版本(Qt 5.12.12(qt-5.12.12-ohos))。 Sysroot选择DevEco Studio\native路径下的sysroot目录(D:\soft_ware\DevEco_Studio\sdk\default\openharmony\native\sysroot)。 Mkspec设置为ohos-clang(注:开源版Qt不需要设置该字段)。

在Qt Creator中设置所需的环境变量:

(1)进入编辑->Preferences->环境->系统,单击环境部分中的Change…按钮。将DevEcoStudio\native包路径添加为新的环境变量:

  • 商业版

    NATIVE_OHOS_SDK=D:\soft_ware\DevEco_Studio\sdk\default\openharmony\native
    
  • 开源版

    OHOS_SDK_PATH=D:\software\DevecoStudio\DevEcoStudio\sdk\default\openharmony
    

(2)进入编辑->Preferences->环境->系统,单击Patch command部分中的浏览按钮。选择Perl\c\bin\patch.exe

更多关于HarmonyOS鸿蒙Next中如何在系统上运行Qt应用程序?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


cke_157.png

你好,我按照评论区教程编译时,会出现该错误。是否有完整编译成功的教程

【解决方案】

  • 可以在鸿蒙系统上安装Qt开发环境
  • HarmonyOS SDK:最低支持 API 版本 15(HarmonyOS 5 及以上需 API 15+)
  • 开发工具:需同时使用 Qt Creator(Qt 开发 IDE)和 华为 DevEco Studio(HarmonyOS 环境依赖,默认自带 SDK,可手动升级至 API 15+),且需先确认 DevEco Studio 可正常开发 Arkts 应用

Gerrit 简介

Qt for HarmonyOS 源代码获取

需通过 Gerrit 克隆仓库,步骤如下:

  1. 登录 Gerrit 平台:https://codereview.qt-project.org
  2. 进入「设置 → HTTP 凭证 → 生成新密码」,保存密码用于后续 git clone
  3. 克隆仓库:访问 https://codereview.qt-project.org/admin/repos/qt/tqtc-qt5,复制仓库地址执行 git clone
  4. 切换分支(二选一): git checkout tqtc/harmonyos-5.12.12git checkout tqtc/harmonyos-5.15.16
  5. 更新子模块:git submodule update --init --recursive

macOS 环境构建(Qt 库 + 应用)

1. 构建 Qt 库

(1)准备第三方依赖

  • 基于 macOS Sonoma 14.0 验证,依赖版本:git 2.39.3python 3.12.0(非最低要求,供参考)。

(2)配置系统环境变量

编辑 ~/.zshrc~/.bashrc,添加以下内容:

local HARMONY_OS_API_VER=12
local HOME_LIBRARY=${HOME}/Library
export OHOS_SDK_ROOT=${HOME_LIBRARY}/OpenHarmony/Sdk
export HOS_SDK_HOME=${HOME_LIBRARY}/OpenHarmony/Sdk
export OHOS_SDK_12=${HOS_SDK_HOME}/${HARMONY_OS_API_VER}
export NATIVE_OHOS_SDK=${OHOS_SDK_12}/native

(3)构建源代码

  • 目标架构:arm64-v8a,需替换脚本中 <ENTER PATH TO YOUR qt/qt5 DIRECORY> 为本地源码路径:

    # 创建构建目录
    ARCH="arm64-v8a"
    QT5_ROOT_DIR=<本地Qt5源码路径>
    QT5_BUILD_DIR="$QT5_ROOT_DIR/build_${ARCH}"
    mkdir "$QT5_BUILD_DIR" && cd "$QT5_BUILD_DIR"
    
    # 执行配置(跳过非必要模块,启用OpenGLES3)
    ../configure \
        -v -xplatform ohos-clang \
        -prefix /data/storage/el1/bundle/libs/arm64 \
        -extprefix ${NATIVE_OHOS_SDK}/opt/Qt/5.12.12/ohos-${ARCH}-clang/ \
        -opensource -confirm-license -release \
        -no-use-gold-linker -no-gcc-sysroot -ohos-arch ${ARCH} -opengles3 \
        -skip qt3d -skip qtactiveqt ...(省略多个非必要模块) \
        -no-dbus -c++std c++14 -nomake examples -nomake tests
    
    # 编译与安装(-j16 为线程数,可调整)
    make -j16
    make install
    
  • 若需 OpenSSL 特性,在 configure 中添加:-openssl-runtime -I"${QT_SOURCE_DIR_OPENSSL}" -sslQT_SOURCE_DIR_OPENSSL 为 OpenSSL 头文件路径,可从 openharmony/third_party_openssl 获取)。

2. 构建 Qt 应用程序(Qt Creator 配置)

(1)创建开发工具包

进入 Qt Creator「Preferences → Kits → Qt Versions」,点击「Add」,选择构建 Qt 库时生成的 qmake 文件。

(2)配置编译器

  • C 编译器:「Compilers → Add → Custom → C」,名称设为 OHOS Clang,路径为 ${NATIVE_OHOS_SDK}/llvm/bin/clang,Make 路径为 /usr/bin/make,ABI 设为 arm-linux-generic-elf-64bit
  • C++ 编译器:步骤同上,名称设为 OHOS Clang++,路径选择 clang++

(3)配置套件

「Kits → Add」,创建新套件(需关联上述 Qt 版本和编译器)。

(4)设置环境变量

「Preferences → Environment → System → Change」,添加:NATIVE_OHOS_SDK=<路径>/OpenHarmony/Sdk/12/native

Windows 环境构建(Qt 库 + 应用)

1. 构建 Qt 库

(1)准备构建环境

  1. 克隆源码:带 --recursive 参数克隆 tqtc-qt5 仓库(确保子模块完整)。

  2. 安装工具:

  3. 配置环境变量:

    • PATH 添加 MinGW 和 Perl 的 bin 目录;
    • 新增系统变量:MINGW_ROOT=<MinGW路径>PERL_ROOT=<Perl路径>
  4. 命令行设置变量(CMD 中执行):

    SET NATIVE_OHOS_SDK=D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native
    SET OHOS_SDK_SYSROOT=%NATIVE_OHOS_SDK%\sysroot
    SET LLVM_INSTALL_DIR=%NATIVE_OHOS_SDK%\llvm
    SET QT5_ROOT_DIR=D:\oh\tqtc-qt5
    

(2)构建与安装

  1. 创建构建目录(与源码目录同级,非子目录),进入目录后设置跳过模块变量:

    SET QT_SKIPS=-skip qt3d -skip qtactiveqt ...(省略多个非必要模块)-no-dbus -skip doc
    
  2. 执行配置(需替换路径):

    call ..\tqtc-qt5\configure.bat -v -xplatform ohos-clang \
        -device-option CROSS_COMPILE=%LLVM_INSTALL_DIR%\bin \
        -prefix /data/storage/el1/bundle/libs/arm64 \
        -extprefix c:\Qt\qt-5.12.12-ohos \
        -opensource -confirm-license -debug -no-use-gold-linker \
        %QT_SKIPS% -nomake tests -nomake examples -no-gcc-sysroot -opengles3 -c++std c++14 -ohos-arch arm64-v8a
    
    • 需 OpenSSL 时添加:-openssl-runtime -I%QT_SOURCE_DIR_OPENSSL% -ssl(头文件路径同 macOS)。
  3. 编译与安装:

    mingw32-make -j8  # -j8 为线程数
    mingw32-make install
    

2. 构建 Qt 应用程序(Qt Creator 配置)

(1)核心配置步骤

  1. 配置 Qt 版本:「偏好设置 → Kits → Qt Versions → Add」,选择 C:\Qt\qt-5.12.12-ohos\bin\qmake,名称设为 Qt %{Qt:Version} for OHOS
  2. 配置编译器:同 macOS 逻辑,C 编译器路径为 MinGW 的 clang.exe,C++ 为 clang++.exe,Make 路径为 mingw32-make.exe,ABI 为 arm-linux-generic-elf-64bit
  3. 配置套件:「Kits → Add」,名称设为 OHOS Clang,Sysroot 设为 D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native\sysroot,关联上述 Qt 版本和编译器,Qt mkspec 设为 ohos-clang
  4. 设置环境变量:添加 NATIVE_OHOS_SDK=<上述路径>

(2)获取模板与编译示例

  1. 下载 DevEco 项目模板:http://codereview.qtcompany.cn:29416/template/,在模板 entry 目录下创建 libs/arm64-v8a
  2. 编译示例(以 Qt 计算器为例):
    • 复制 <qt5-root>\examples\widgets\widgets\calculator 到项目目录,用 Qt Creator 打开 calculator.pro,选择 OHOS Clang 套件编译,生成 libcalculator.so(路径:build-calculator-OHOS_Clang-Debug)。

在 HarmonyOS 硬件上运行应用

1. 准备应用文件

  1. 复制 libcalculator.so 到 DevEco 模板的 entry\libs\arm64-v8a 目录。
  2. 复制 Qt 依赖库:从 <Qt安装路径>\lib\ 复制必要库(如 libQt5Widgets.so)到上述 libs 目录。

2. 修改与运行

  1. 修改 ETS 代码:在 DevEco Studio 中打开模板,编辑 entry\src\main\ets\common\QtAppConstants.ets,将 APP_LIBRARY_NAME 改为 libcalculator.so
  2. 设备配置:连接硬件设备(确保 DevEco 可识别),配置签名(「file → project structure → signing configs」,勾选所有项)。
  3. 构建运行:在 DevEco Studio 中选择设备,点击运行,编译成功后应用将在设备上启动。

注意:

  • 架构支持:当前仅验证 arm64-v8a 架构。
  • Qt 版本:支持 5.12.12 和 5.15.16(对应 HarmonyOS 分支)。
  • 问题排查:优先确保 DevEco Studio 可正常开发 Arkts 应用,避免环境依赖冲突。

可以的~~~~

在 Windows 中为 HarmonyOS 构建 Qt 应用程序

以下说明内容的前提是,您已经安装了DevEco studio、HarmonyOS工具链,已经有HarmonyOS的设备。

请注意 Qt5 构建 + 多个选项,目前 Arch 是 arm64-v8a。

准备 下载Qt Creator 作为 Qt 开发的IDE

下载 Qt Creator,手动创建HarmonyOS构建套件

在 Qt Creator 中为 HarmonyOS 创建开发工具包

前往编辑 → 偏好设置 → 构建套件

配置 Qt 版本

转到 Qt版本选项卡,单击添加按钮

cke_651.png

转到安装 Qt 5.12.12 for OHOS 的文件夹(应安装在 PREFIX 指定的路径中),然后转到 bin 文件夹,选择 qmake 应用程序并单击打开。例如,之前使用 PREFIX=C:\Qt\qt-5.12.12-ohos 编译了 Qt 源代码,因此 qmake 将位于 C:\Qt\qt-5.12.12-ohos\bin\qmake。将名称设置为 Qt %{Qt:Version} for OHOS。此时,应该有信息表明没有可以为此 Qt 版本生成代码的编译器。

cke_2220.png

配置编译器

转到“编译器”选项卡。单击“添加”按钮,然后选择“自定义”→“C”

将名称设置为 OHOS Clang。

假设您已按照说明从源代码开始构建 Qt 5.12.12 for OHOS,那么应该已经安装了 llvm-mingw。如果没有,请按照 MinGW 工具链安装步骤执行Qt for HarmonyOS/zh#准备构建环境

将 Make 路径设置为 MinGW 工具链附带的 mingw32-make.exe 可执行文件。它应位于 <path-to-MinGW-toolchain>\bin\mingw32-make.exe。不要忘记将 <path-to-MinGW-toolchain> 替换为实际路径。

将 ABI 更改为arm - linux - generic - elf - 64bit

cke_3323.png

对于 c++ 编译器,请按照上述步骤操作。不过,这次请确保将名称设置为 OHOS Clang++,并在编译器路径中选择 clang++.exe。

cke_4642.png

配置构建套件

转到 构建套件选项卡,单击添加按钮

将名称设置为 OHOS Clang

将 Sysroot 设置为 D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native\sysroot。在 Compiler 部分,选择之前配置的 C(OHOS Clang) 和 C++(OHOS Clang++) 编译器。

在 Qt 版本中选择之前为 OHOS 配置的 Qt 5.12.12。

将 Qt mkspec 设置为 ohos-clang。

完整的套件应如下所示:

cke_5603.png

在 Qt Creator 中设置所需的环境变量

转到编辑→首选项→环境→系统,然后单击环境部分中的Change…按钮。

通过添加一行 NATIVE_OHOS_SDK=D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native 添加新的环境变量

cke_6944.png

获取 DevEco 项目模板

请联系我们以获取用于构建最终 OpenHarmony Qt 应用程序的 DevEco 项目模板。这将用于在 HarmonyOS 设备上运行 Qt 应用程序。 开发者也可以从以下链接获取最新模版: http://codereview.qtcompany.cn:29416/template/

将 DevEco 项目模板放入已知位置。我们将其命名为 <deveco-project>

转到文件夹 <deveco-project>\entry 并创建一个文件夹 <deveco-project>\entry\libs\arm64-v8a

编译一个简单的 Qt 项目

为了简化此说明,我们不会从头开始创建应用程序,而是使用Qt widget的现有示例。

转到您的 Documents 文件夹并创建一个名为 qt_creator_projects 的新文件夹。然后转到资源管理器中的 <qt5-root>\examples\widgets\widgets 文件夹并将整个计算器文件夹复制到 qt_creator_projects 文件夹中

然后,在 QtCreator 中,单击文件打开文件或项目,然后转到 qt_creator_projects\calculator 并选择 calculator.pro

在“配置项目”选项卡中,选择OHOS Clang 套件并单击**“配置项目”**按钮。

通过单击Build → **Build Project “calculator”**来触发编译,或者使用快捷键:Ctrl+B。项目应该可以顺利编译。

您应该能够在 Documents\qt_creators_projects\build-calculator-OHOS_Clang-Debug 文件夹中 找到已编译的libcalculator.so文件。

在HarmonyOS Next上运行Qt应用,需使用ArkTS/ArkUI进行原生开发,不支持直接运行Qt跨平台应用。若需迁移,需将Qt代码逻辑转换为ArkTS,并使用鸿蒙的UI框架重构界面。目前无官方Qt适配方案。

目前,HarmonyOS Next 系统本身不直接支持安装或运行传统的 Qt 应用程序。原因在于 HarmonyOS Next 采用了全新的纯鸿蒙内核,不再兼容 Linux 内核 AOSP,因此无法直接运行基于 Linux 环境的 Qt 应用。

针对你的问题,具体说明如下:

  1. 无法在 HarmonyOS Next 系统上安装 Qt 开发环境或运行时。 系统没有提供兼容的 Linux 库和依赖,Qt 应用程序所需的运行条件在 HarmonyOS Next 上不存在。

  2. 若要让现有 Qt 应用程序在 HarmonyOS Next 上运行,目前唯一可行的技术路径是 进行应用代码的迁移和重写

    • 你需要将 Qt 应用的核心逻辑(C/C++ 部分)通过 HarmonyOS Native API (ArkTS/NAPI) 进行封装和调用。
    • 原有的 Qt 界面(QML 或 Widgets)需要完全使用 HarmonyOS 的 ArkUI 框架(推荐声明式开发范式)进行重新开发。
    • 本质上,这是在 HarmonyOS 平台上,使用其原生开发工具(DevEco Studio)和框架,重新构建一个功能等效的全新应用。

总结: 无法直接将 Qt 应用部署到 HarmonyOS Next。必须将其改造为纯鸿蒙原生应用,这是一个涉及界面重绘和底层接口适配的移植开发过程,而非简单的兼容性运行。

回到顶部