本文档将指导您如何在 Mac 平台上配置 Qt 鸿蒙应用开发环境。
本文档中使用的 Qt for OpenHarmony SDK 是由 OpenHarmony SIG 社区基于 Qt 5.15 独立开发和维护的项目,非 Qt 官方版本。
注意事项:
在安装界面中,将“DevEco-Studio.app”拖拽到“Applications”中,等待安装完成。

img

image-20251104150550972
tar -xf Qt5.15.12_alpha_v7_arm64-v8a_openharmony_ndk_5.0.3.135_community_macos.tar.gz -C ~/QtForOpenHarmony

image-20251104151621833
cd bin
./qmake -query

image-20251104151558132
打印
QMAKE_XSPEC:oh-clang即为 Qt for OpenHarmony 版本,Qt for OpenHarmony SDK 安装完成。
至此基于 DevEco Studio 的 Qt for OpenHarmony 应用开发环境搭建完毕。

image-20251104151945614
修改工程名称,并根据实际情况选择工程最终需要运行的设备类型,Bundle name 为应用唯一标识需确保不和其它应用冲突,Save location 可自行选择工程路径,Compatible SDK 可根据设备的 API 版本号自行修改,主模块名称可自行修改:

image-20251104152238613
创建 OpenHarmony 工程(可选)
在完成创建 HarmonyOS 工程[4]后,根据如下操作修改工程级 build-profile.json5 文件中相关字段:
"products": [
{
"name": "default",
"signingConfig": "default",
"compileSdkVersion": 18, //指定OpenHarmony应用编译时的版本,当前以API 18为例
"targetSdkVersion": 18, //指定OpenHarmony应用运行所需的目标SDK版本,当前以API 18为例
"compatibleSdkVersion": 18, //指定OpenHarmony应用兼容的最低版本,当前以API 18为例
"runtimeOS": "OpenHarmony",
}
]
单击 Sync Now 进行同步。在 Sync Check 弹窗中点击Yes,同意将 module.json5/config.json 文件中的 phone 切换为 OpenHarmony 支持的 default 类型,并删除在 OpenHarmony 不适用的其他设备类型,同步成功无其他报错则工程创建完成。

image-20251104152748745
修改基础配置 :找到创建工程时使用的模块对应目录下的build-profile.json5文件,修改arguments字段(指定 Qt SDK 路径)和abiFilters字段(最终运行的设备架构):
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "-DQT_PREFIX=/Users/baixm/QtForOpenHarmony",
"cppFlags": "",
"abiFilters": ["arm64-v8a"]
}

image-20251104153212123
拷贝 ets 文件依赖: 将 Qt SDK 目录下的openharmony/qtbase所有目录复制替换到工程模块下的src/main/ets目录下:

image-20251104153509920

image-20251104153416313
拷贝 qml 资源及库文件依赖: 将 Qt SDK 目录下的qml目录分别拷贝到工程模块下的libs/arm64-v8a(qml 库依赖)和src/main/resources/resfile(qml 资源文件依赖)目录下(resfile 目录需要自己创建),并将 Qt SDK 目录下的plugins/platforms/libplugins_platforms_qopenharmony.so拷贝到工程模块下的libs/arm64-v8a目录下:

image-20251104154231996

image-20251104154414669
模块module.json5文件配置 UIAbility 组件,这是应用的入口。"launchType": "specified"表示该 UIAbility 为指定实例模式,若工程需要打开多个窗口时,应将launchType指定为specified。配置 module.json5 文件内容如下图所示。

image-20251104154612427
移除napi_init.cpp文件,修改CMakeLists.txt文件,并添加main.cpp、main.qml以及qml.qrc文件。
// CMakeLists.txt
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(QtForHOSample)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
list(APPEND CMAKE_FIND_ROOT_PATH ${QT_PREFIX})
include_directories(${NATIVERENDER_ROOT_PATH}
${NATIVERENDER_ROOT_PATH}/include)
find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Concurrent Gui Network Qml Quick QuickControls2 Widgets QuickTemplates2 QmlWorkerScript)
add_library(entry SHARED main.cpp qml.qrc)
target_link_libraries(entry PRIVATE Qt${QT_VERSION_MAJOR}::Concurrent
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Network
Qt${QT_VERSION_MAJOR}::Qml
Qt${QT_VERSION_MAJOR}::Quick
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::QuickControls2
Qt${QT_VERSION_MAJOR}::QuickTemplates2
Qt${QT_VERSION_MAJOR}::QmlWorkerScript
Qt${QT_VERSION_MAJOR}::QOpenHarmonyPlatformIntegrationPlugin
)
// main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
width: 400
height: 300
visible: true
title: "Hello World QML"
Rectangle {
width: 300
height: 200
color: "lightblue"
anchors.centerIn: parent
Text {
text: "Hello World!"
font.pixelSize: 32
color: "darkblue"
anchors.centerIn: parent
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>
// main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}

image-20251104172840294
参考资料
[1]
DevEco Studio 官网: https://developer.huawei.com/consumer/cn/download/
[2]
历史版本: https://developer.huawei.com/consumer/cn/download/deveco-studio
[3]
Qt for OpenHarmony SDK: https://gitcode.com/openharmony-sig/qt/releases
[4]
创建 HarmonyOS 工程: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-create-new-project#section11644183711342