移植开源软件Notepad--(NDD)到鸿蒙PC:环境搭建与配置

背景与概述

Notepad-- 是一个功能强大的开源文本编辑器,支持多种编程语言的语法高亮、插件扩展等功能。随着OpenHarmony生态向PC端扩展,将Notepad--移植到OpenHarmony PC环境上,不仅能够丰富鸿蒙生态的应用种类,还能为开发者提供一个实用的桌面级文本编辑工具。本文将详细介绍如何在OpenHarmony PC环境下移植Notepad--。

Notepad--(NDD)的开源地址:
https://gitcode.com/GitHub_Trending/no/notepad--

请注意:本文使用的Qt for OpenHarmony SDK由OpenHarmony SIG社区基于Qt 5.15独立开发和维护,非Qt官方版本。

Notepad--在OpenHarmony PC端的优势

Notepad--作为一款成熟的开源文本编辑器,其丰富的功能和强大的可扩展性非常适合移植到OpenHarmony PC平台。通过移植,Notepad--将能够:

  1. 充分利用Qt Widgets:Notepad--主要基于Qt Widgets模块,可以无缝适应OpenHarmony PC的桌面环境。
  2. 语法高亮和插件支持:支持多种编程语言的语法高亮和动态插件加载,提高开发效率。
  3. 跨平台一致性:保持与原版Notepad--一致的用户界面和功能,减少学习成本。

环境搭建与配置

文档适用范围

  • OpenHarmony API 15 (5.0.3) 及以上版本
  • Qt for OpenHarmony (基于 Qt 5.15)
  • DevEco Studio 5.0.5 及以上版本

前置条件

  1. 安装DevEco Studio 5.0.5及以上版本
  2. 下载并配置Qt for OpenHarmony SDK
  3. 了解OpenHarmony应用开发基础

1. DevEco Studio下载与安装

  • 官方下载地址DevEco Studio官网
  • 注意事项
    • 推荐使用最新稳定版本以获得最佳兼容性。
    • 历史版本可能不支持最新的OpenHarmony API,可通过官网指定页面获取。
    • 具体安装步骤请参考鸿蒙官方安装教程

2. Qt SDK下载与配置

本文假设您已完成基础环境搭建,包括:

  • 安装DevEco Studio 5.0.5及以上版本
  • 下载并配置Qt for OpenHarmony SDK
  • 了解OpenHarmony应用开发基础

如未完成,请参考前文《QT开发鸿蒙移动应用:环境搭建及第一个HelloWorld程序》中的环境搭建部分。

下载与准备Notepad--源码

  1. 下载Notepad--源码:从Notepad--的官方仓库下载源码。

  2. 解压源码 :将下载的源码包解压到一个工作目录,例如 ~/Projects/notepadqq

创建OpenHarmony工程

1. 新建OpenHarmony工程

  1. 打开DevEco Studio,选择"Create Project"。
  2. 选择"Native C++"模板。
  3. 配置工程信息:
    • Project Name : NotePad--
    • Bundle Name : com.example.notepadqq
    • SaveLocation : 工程保存路径(如 ~/Projects/notepadqq
    • Compile SDK: 选择API 17或更高版本
    • Model: 选择"Stage"
    • Device Type: 选择"Tablet"或"2in1"

2. 修改为OpenHarmony工程

修改工程级 build-profile.json5 文件:

json 复制代码
"products": [
  {
    "name": "default",
    "signingConfig": "default",
    "compileSdkVersion": 17,
    "targetSdkVersion": 17,
    "compatibleSdkVersion": 17,
  
    // ... 其他配置
  }
]

点击"Sync Now"同步工程。

3. 工程配置调整

3.1 修改Native编译配置

在模块级build-profile.json5中配置Qt SDK路径和架构:

json 复制代码
"externalNativeOptions": {
  "path": "./src/main/cpp/CMakeLists.txt",
  "arguments": "-DQT_PREFIX=/path/to/your/QtForOpenHarmony",
  "abiFilters": ["arm64-v8a"] // PC设备通常使用64位ARM或x86架构
}

注意:根据实际PC设备架构调整abiFilters,可能为["arm64-v8a"]["x86_64"]

3.2 拷贝依赖文件
  1. 拷贝ets文件 :将Qt SDK下的openharmony/qtbase目录内容复制到src/main/ets目录。
  2. 拷贝库文件 :将Qt SDK下的plugins/platforms/libplugins_platforms_qopenharmony.so拷贝到libs/arm64-v8a目录下。
  3. 拷贝开源项目代码 :将notepadd--的开源代码放置在如下目录中。
3.3 配置UIAbility

module.json5中配置PC应用入口:

json 复制代码
{
  "module": {
    "name": "entry",
    "type": "entry",
    "srcEntry":"./ets/abilitystage/MyAbilityStage.ets" ,// 关键配置
    // ...
    "abilities": [
      {
        "name": "EntryAbility",
        "launchType": "specified", // 关键配置
        // ... 其他配置
      }
    ]
  }
}

修改和配置CMakeLists.txt

1. 修改CMakeLists.txt文件

将how_build目录下的目录下CMakeLists.txt文件拷贝出来,文件内容如下,针对鸿蒙PC的编译做些修改:

cmake 复制代码
cmake_minimum_required(VERSION 3.16)
project(Notepad-- VERSION 1.22.0)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

list(APPEND CMAKE_FIND_ROOT_PATH ${QT_PREFIX})

find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widgets Concurrent Network PrintSupport XmlPatterns)

# qscint 关键依赖库
add_subdirectory(${PROJECT_SOURCE_DIR}/src/qscint)

# 插件库包含
# helloworld 动态插件库
add_subdirectory(${PROJECT_SOURCE_DIR}/src/plugin/helloworld)

# win下需要开启UNICODE进行支持TCHAR
if(CMAKE_HOST_WIN32)
    add_definitions(-D_UNICODE -DUNICODE)
endif()

if(${PLUGIN_EN})
    if(${PLUGIN_EN}  STREQUAL on)
        add_definitions(-DNO_PLUGIN=1)
    endif(${PLUGIN_EN})    
endif()

file(GLOB UI_SRC ${PROJECT_SOURCE_DIR}/src/*.ui)
set(UI_SRC ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/cceditor/ccnotepad.ui)
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/src/cceditor SRC)

if(CMAKE_HOST_WIN32)
    add_executable(${PROJECT_NAME} WIN32 ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
else()
    add_library(${PROJECT_NAME} SHARED ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
endif()

target_include_directories(${PROJECT_NAME} PRIVATE
    ${PROJECT_SOURCE_DIR}/src
    ${PROJECT_SOURCE_DIR}/src/cceditor
    ${PROJECT_SOURCE_DIR}/src/qscint/src
    ${PROJECT_SOURCE_DIR}/src/qscint/src/Qsci
    ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/src
    ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/include
    ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexlib
    ${PROJECT_SOURCE_DIR}/src/qscint/scintilla/boostregex
)

target_link_libraries(${PROJECT_NAME} PRIVATE
    qscint
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Concurrent
    Qt${QT_VERSION_MAJOR}::Network
    Qt${QT_VERSION_MAJOR}::PrintSupport
    Qt${QT_VERSION_MAJOR}::XmlPatterns
    # 链接鸿蒙平台插件
    ${QT_PREFIX}/plugins/platforms/libplugins_platforms_qopenharmony.so
)

if(CMAKE_HOST_UNIX)
    install(
        TARGETS ${PROJECT_NAME}
        DESTINATION "bin"
    )

    install(DIRECTORY  ${PROJECT_SOURCE_DIR}/src/linux/usr
            DESTINATION "/")

    include(${PROJECT_SOURCE_DIR}/cmake/deb_package_config.cmake) 
    include(CPack)
elseif(CMAKE_HOST_WIN32)

    install(TARGETS ${PROJECT_NAME}
            DESTINATION "/")

    install(DIRECTORY  ${PROJECT_SOURCE_DIR}/build/bin/
            DESTINATION "/")
    # 设置软件版本
    set(CPACK_PACKAGE_NAME "NotePad--")
    set(CPACK_PACKAGE_DESCRIPTION "NotePad--")
    set(CPACK_PACKAGE_COPYRIGHT "Copyright (c) 2023")
    set(CPACK_PACKAGE_VERSION "1.22.0")
    set(CPACK_PACKAGE_VERSION_MAJOR "1")
    set(CPACK_PACKAGE_VERSION_MINOR "22")
    set(CPACK_PACKAGE_VERSION_PATCH "0")

    include(${PROJECT_SOURCE_DIR}/cmake/nsis_package_config.cmake) 
    include(CPack)
endif()

2. 配置依赖库

确保所有依赖库已正确添加到项目中,特别是 qscinthelloworld 插件库。这些库可以通过 add_subdirectory 指令集成到项目中。

3. 定义平台特定配置

根据不同的开发平台(Windows 和 Mac),定义相应的编译选项和资源文件。例如,在Windows平台上开启UNICODE支持,在Unix平台上指定安装路径。

构建与运行

1. 构建应用

  1. 在DevEco Studio中,点击"Build" → "Build HAP(s)"
  2. 等待构建完成,确保无编译错误

2. 运行应用

由于目前鸿蒙PC模拟器可能尚未普及,建议在真实PC设备上运行。

  1. 真实PC设备

    1. 准备已刷入OpenHarmony PC版的设备
    2. 通过USB连接设备
    3. 在DevEco Studio中选择目标设备
    4. 点击运行按钮,应用将自动安装并启动
  2. 远程调试

    1. 配置PC设备的远程调试选项
    2. 在DevEco Studio中配置远程连接
    3. 部署并运行应用

3. 应用效果

应用启动后,将显示一个标准的桌面窗口,包含:

  • 标题栏(可最小化/最大化/关闭)
  • 中央内容区域(文本编辑框)
  • 底部状态栏
  • 完整的菜单栏、工具栏(可根据需要添加)

1. 常见问题解决

  1. 库文件缺失 :确保所有依赖库已正确拷贝到 libs 目录
  2. 架构不匹配 :确认设备架构与 abiFilters 配置一致
  3. 权限问题 :在 module.json5 中申请必要的PC应用权限

2. 性能优化建议

  1. 懒加载控件:大型应用可考虑动态加载UI组件
  2. 资源管理:合理管理图片、字体等资源
  3. 事件处理:优化耗时操作,避免阻塞UI线程

未来展望

Notepad--在OpenHarmony PC平台的应用开发具有重要价值:

  1. 企业级应用迁移:大量现有Qt桌面应用可平滑迁移至OpenHarmony PC
  2. 生产力工具开发:利用Qt Widgets丰富控件库开发办公、设计等专业软件
  3. 混合开发模式:结合Qt Quick和Qt Widgets,兼顾传统界面与现代UI需求
  4. 生态建设:推动OpenHarmony PC应用生态的快速成熟

随着OpenHarmony PC生态的完善,Notepad--将成为连接传统桌面应用与新一代操作系统的重要桥梁,为开发者提供高效、可靠的PC应用开发解决方案。

相关推荐
鸿蒙开发工程师—阿辉3 小时前
HarmonyOS 上下文的使用: 脱离 UI 怎么用 Context?
ui·华为·harmonyos
豌豆学姐3 小时前
123 口播数字人 API 接入实战:附完整前后端开源项目
大数据·php·uniapp·开源软件
FrameNotWork4 小时前
HarmonyOS 教学实战(八):后台任务、Worker 与任务调度
华为·harmonyos
飞函安全4 小时前
Mattermost限制历史消息访问:开源软件商业化困局
运维·安全·开源软件
¥-oriented5 小时前
【鸿蒙相关活动】
harmonyos
梦想不只是梦与想6 小时前
鸿蒙中 倒计时实现方法
华为·harmonyos·鸿蒙·setinterval·texttimer
sinat_3842410916 小时前
HarmonyOS音乐播放器开发实战:从零到一打造完整鸿蒙系统音乐播放器应用 2
华为·gitlab·intellij-idea·harmonyos·visual studio·webstorm
waeng_luo18 小时前
HarmonyOS开发-多线程与异步编程
harmonyos·鸿蒙2025领航者闯关·鸿蒙6实战·#鸿蒙2025领航者闯关
花开彼岸天~18 小时前
鸿蒙平台使用 `video_thumbnail` 插件指南
华为·harmonyos