1、多版本或指定位置的DevEco安装

1. 下载并解压新版 DevEco Studio

双击解压,得到 DevEco Studio.app 文件。

2. 手动移动 .app 文件到独立目录

● 不要直接双击运行!否则会默认安装到 /Applications 目录,与旧版冲突。
● 打开 访达(Finder),进入解压后的文件夹,右键点击 DevEco Studio.app,选择 “显示包内容”(可选,用于确认内容)。

拖拽 DevEco Studio.app 到自定义的独立目录,例如:

/Applications/DevEcoStudio_New/DevEco Studio.app

目录层级示例:

复制代码/Applications/
  ├── DevEco Studio.app          # 旧版
  └── DevEcoStudio_New/
      └── DevEco Studio.app      # 新版
3. 创建启动快捷方式(可选)

● 将新版本的 DevEco Studio.app 拖到 程序坞(Dock),或创建 别名(Alias) 到桌面。
● 右键点击 .app 文件,选择 “制作替身”,将替身放到桌面或常用位置。

4. 首次启动时选择独立 SDK 路径

● 双击新版本的 .app 文件启动。
● 首次启动时,DevEco Studio 会提示 配置 HarmonyOS SDK 路径。
● 关键点:点击“Browse”,选择独立的新目录,例如:

~/Library/Huawei/Sdk_New/

2、SDK下载与配置

1、获取Qt for OpenHarmony SDK

● 下载地址:Qt for OpenHarmony SDK
● 推荐版本:建议使用最新版本

2、安装名为QtForOpenHarmony的SDK目录文件
终端安装
步骤一:mkdir QtForOpenHarmony
步骤二:cd Downloads
步骤三:tar -xf Qt5.15.12_alpha_v7_arm64-v8a_openharmony_ndk_5.0.3.135_community_macos.tar.gz -C ~/QtForOpenHarmony
步骤四:cd ~/QtForOpenHarmony
步骤五:ls
验证是否安装成功
步骤一:cd bin
步骤二:./qmake -query

3、创建一个Qt工程

1、打开DevEco Studio,新建一个Native C++类型的空模版

● Project name:创建项目后的项目目录名称
● Bundle name:项目创建的唯一包名名称
● Save location:项目在电脑中存放的位置
● Compatible SDK:当前目录的最低兼容SDK版本
● Module name:项目主模块的名称
● Device type:项目可以运行到那种设备中

2、创建OpenHarmony工程

根据当前系统设备版本,进行版本设置,事例版本:20
● 运行环境是HarmonyOS时,字段类型是字符串,配置示例:“targetSdkVersion”: “6.0.1(20)”。
● 运行环境是OpenHarmony时,字段类型是数值,配置示例:“targetSdkVersion”: 20。

3、Qt 工程配置

找到项目模块下的build-profile.json5文件,arguments字段指定Qt SDK存储路径,abiFilters字段指定运行设备的架构

 "externalNativeOptions": {
      "path": "./src/main/cpp/CMakeLists.txt",
      "arguments": "-DQT_PREFIX=/Users/miko/QtForOpenHarmony",
      "cppFlags": "",
      "abiFilters": ["arm64-v8a"]
    }

将Qt SDK目录下的openharmony/qtbase所有目录复制替换到工程模块下的src/main/ets目录下

将Qt SDK目录下的qml目录分别拷贝到工程模块下的libs/arm64-v8a(qml库依赖)和src/main/resources/resfile(qml资源文件依赖)目录下

将Qt SDK目录下的plugins/platforms/libplugins_platforms_qopenharmony.so拷贝到工程模块下的libs/arm64-v8a目录下

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

4、编写一个Qt的Hello World

移除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
        }
    }
}

qml.qrc

<?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();
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐