HarmonyOS鸿蒙PC开源QT软件移植:移植开源文本编辑器 NotePad--(Ndd)到鸿蒙 PC实践总结

本文结合当前仓库 notepad--_ohos,说明如何把基于 Qt Widgets 的开源项目 NotePad–(常称 Ndd)从传统桌面形态,迁移为可在 鸿蒙 PC / 平板 上安装的 HAP 应用。核心结论:先在 Windows 上交叉编译出面向 OpenHarmony 的 libNotePad--.so,再在 DevEco Studio 的 ArkTS 工程里加载该库并完成打包与签名。


欢迎加入开源鸿蒙开发者社区交流:https://harmonypc.csdn.net/


移植成功后的运行效果
在这里插入图片描述
移植后的开源地址:https://gitcode.com/qq8864/notepad–_ohos

一、为什么鸿蒙上的 Qt 和传统 PC 不一样

维度传统 Qt PC 应用鸿蒙上的 Qt 应用(本方案)
产物形态多为独立可执行文件(如 Windows 下 .exe业务 UI 与逻辑编译为 .so 动态库
工程入口Qt Creator / CMake 直接生成可执行目标CMake 仍负责 原生库Ability / Stage / 生命周期 由 DevEco Studio 的 ArkTS 模板承载
运行方式操作系统直接启动进程系统启动 ArkTS 应用进程,再由 Qt on OHOS(如 libqohos.so)在运行时 加载 你的 libNotePad--.so

因此,移植的“分水岭”不是把 ArkTS 重写一遍,而是:把原先 add_executable 的主程序,在 OHOS 交叉编译条件下改为 add_library(… SHARED …),产出与 ArkTS 侧约定的库名一致的原生库,其余壳层使用官方或模板提供的 Qt 嵌入式工程即可。


二、待移植的Notepad-- 介绍

Notepad-- 是使用C++编写的轻量级文本编辑器,简称ndd,目前在git仓库上有15.5K Stars。可以支持Window/Mac/Linux操作系统平台。是替换notepad++的一种选择,其内置强大的代码对比功能,让你丢掉付费的beyond compare。目标是完成文本编辑类软件的国产可替代,重点在国产Uos/Linux系统、Mac 系统上发展。对比其它竞品Notepad类软件而言,优势是可以跨平台,支持linux mac操作系统。

NotePad–开源地址https://gitee.com/cxasm/notepad–
在这里插入图片描述

三、本仓库中的代码布局

  • 鸿蒙工程根目录notepad--_ohos/(DevEco Studio 打开的工程)。
  • Qt 侧源码(NotePad-- 主工程)Doc/src_qt_prj/notepad---main/

    说明:若你本地或文档中写作 notepad--_main,请以 Doc/src_qt_prj/实际文件夹名为准;本仓库为 notepad---main

  • ArkTS 中声明要加载的库名entry/src/main/ets/common/QtAppConstants.ets
//entry/src/main/ets/common/QtAppConstants.ets
export const APP_LIBRARY_NAME = 'libNotePad--.so';
export const LOG_DOMAIN = 0x0000;
export const LOG_TAG = 'ohosNotePad--';
  • Qt 运行时初始化入口(模板侧)entry/src/main/ets/qabilitystage/QAbilityStage.ets 中通过 qpa.setupQtApplication({ … appName: APP_LIBRARY_NAME … })APP_LIBRARY_NAME 传给原生层,用于加载对应 .so

四、移植总流程

参考文章:《HarmonyOS 鸿蒙PC端 Qt 应用开发:第三方 Qt 开源软件移植指南

  1. 准备环境

    • DevEco Studio / HarmonyOS SDK(含 OpenHarmony native 工具链与 ohos.toolchain.cmake)。
    • 面向鸿蒙的 Qt 5.12 构建树(示例路径下文以 C:/Qt/qt-5.12.12-ohos 表示),需与目标 ABI(如 arm64-v8a)一致。下载地址https://gitcode.com/OpenHarmonyPCDeveloper/ohos_Qt5.12.12
  2. 修改 Qt 工程 CMake
    OHOS 条件下将主目标从可执行文件改为共享库(本仓库已改好,可作参考)。

  3. 使用 CMake + OHOS 工具链配置并编译
    单独的 build 目录中执行 cmake 配置与 cmake --build,得到 libNotePad--.so

  4. 集成到 DevEco 工程
    libNotePad--.so 及 Qt 运行依赖(如各 libQt5*.so、平台插件等,按 Qt-for-OHOS 文档放置)放到 entry 模块约定位置,保证与 abiFilters(如 arm64-v8a / x86_64)一致。

  5. 确认 ArkTS 常量
    APP_LIBRARY_NAME 与 CMake PROJECT_NAME / 生成的 lib 前缀、-- 等特殊字符命名一致(本工程为 'libNotePad--.so')。

  6. Build HAP → 签名 → 安装到鸿蒙 PC 真机
    使用 DevEco Studio 正常打包流程即可。


五、CMake 侧关键改动(生成 .so 而非 .exe

本仓库在 Doc/src_qt_prj/notepad---main/CMakeLists.txt 中,用 OHOS 宏区分鸿蒙交叉编译:鸿蒙下使用 add_library(… SHARED …),其它平台保持原有 add_executable 逻辑。

#Doc/src_qt_prj/notepad---main/CMakeLists.txt
if(OHOS) # 鸿蒙交叉编译环境下
    message(STATUS ">>>> 当前模式: 鸿蒙交叉编译 (生成 SHARED 库) <<<<")
    add_library(${PROJECT_NAME} SHARED ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
elseif(CMAKE_HOST_WIN32)
    # 原有的 Windows 可执行文件逻辑
    list(APPEND WIN_RCS ${PROJECT_SOURCE_DIR}/src/RealCompareToMinGw.rc)
    add_executable(${PROJECT_NAME} WIN32 ${WIN_RCS} ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
else()
    message(STATUS ">>>> 当前模式: 其他平台编译 <<<<")
    add_executable(${PROJECT_NAME} ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
endif()

要点:

  • project(NotePad-- …)add_library(${PROJECT_NAME} SHARED …) 共同决定生成的库文件名一般为 libNotePad--.so(与 QtAppConstants.ets 中字符串一致)。
  • 仍通过 find_package(Qt5 …)target_link_libraries 链接 Qt 与 qscint 等子工程;鸿蒙下只要 Qt 与工具链均为 OHOS 目标 即可链接通过。

六、编译 libNotePad--.so:命令

以下路径需按你本机 SDK 安装位置Qt OHOS 根目录 修改。示例与仓库内 Doc/src_qt_prj/notepad---main/build/build_ohos.bat 思路一致:指定 OHOS 的 cmake.exeohos.toolchain.cmake-DOHOS_ARCH 以及 Qt5 的 CMAKE_PREFIX_PATH / Qt5_DIR

notepad---main 下新建或进入 build 目录后执行:

1)配置(Generate)

"D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native\build-tools\cmake\bin\cmake.exe" ^
  -DCMAKE_PREFIX_PATH="C:/Qt/qt-5.12.12-ohos" ^
  -DCMAKE_TOOLCHAIN_FILE="D:/oh/DevEcoStudio/sdk/HarmonyOS-NEXT-DB6/openharmony/native/build/cmake/ohos.toolchain.cmake" ^
  -DQt5_DIR="C:/Qt/qt-5.12.12-ohos/lib/cmake/Qt5" ^
  -DCMAKE_FIND_ROOT_PATH="C:/Qt/qt-5.12.12-ohos" ^
  -DOHOS_ARCH=arm64-v8a ^
  ..

2)构建

"D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native\build-tools\cmake\bin\cmake.exe" --build .

成功后在 build 目录(或 CMake 配置的输出目录)下可找到 libNotePad--.so

可选:本仓库已提供批处理 Doc/src_qt_prj/notepad---main/build/build_ohos.bat,其中包含 SDK_PATHQT_ROOTARCH 等变量,可按机器路径改完后双击或在命令行执行,完成“配置 + Ninja 构建”两步。

或者,嫌上述命令的方式太长,可以整理为一个通用的脚本。

脚本如下

@echo off
setlocal

:: ==========================================
:: 作者:猫哥
:: 邮箱:[534117529@qq.com]
:: 博客:[blog.csdn.net/qq8864]
:: 描述:QT的Cmake工程的鸿蒙PC平台编译脚本
:: ==========================================

:: ==========================================
:: 配置项自定义区
:: ==========================================

:: SDK 与 工具链路径
set SDK_PATH=D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native
set CMAKE_EXE=%SDK_PATH%\build-tools\cmake\bin\cmake.exe
set TOOLCHAIN=%SDK_PATH%\build\cmake\ohos.toolchain.cmake

:: Qt 相关路径
set QT_ROOT=C:/Qt/qt-5.12.12-ohos
set QT_DIR=%QT_ROOT%/lib/cmake/Qt5

:: 编译配置
set ARCH=arm64-v8a
set BUILD_TYPE=Debug
set SOURCE_DIR=../

:: ==========================================
:: 第一步:配置项目 (CMake Configure)
:: ==========================================

echo [信息] 正在启动面向 OpenHarmony 的 CMake 配置...
echo [信息] 目标架构: %ARCH%

"%CMAKE_EXE%" ^
    -G "Ninja" ^
    -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
    -DOHOS_ARCH=%ARCH% ^
    -DCMAKE_TOOLCHAIN_FILE="%TOOLCHAIN%" ^
    -DCMAKE_PREFIX_PATH="%QT_ROOT%" ^
    -DQt5_DIR="%QT_DIR%" ^
    -DCMAKE_FIND_ROOT_PATH="%QT_ROOT%" ^
    %SOURCE_DIR%

if %ERRORLEVEL% NEQ 0 (
    echo [错误] CMake 配置阶段失败!
    pause
    exit /b %ERRORLEVEL%
)

:: ==========================================
:: 第二步:执行构建 (CMake Build)
:: ==========================================

echo [信息] 配置成功,正在开始构建项目...

:: 使用 --build 参数跨平台调用 Ninja 编译
"%CMAKE_EXE%" --build .

if %ERRORLEVEL% NEQ 0 (
    echo [错误] 编译构建阶段失败!
    pause
    exit /b %ERRORLEVEL%
)

echo [成功] 恭喜,编译顺利完成!
pause

在这里插入图片描述

构建成截图:
在这里插入图片描述


七、与 DevEco 工程对接时要注意什么

在这里插入图片描述

  1. 库名与 ArkTS 常量一致
    修改或核对 export const APP_LIBRARY_NAME = 'libNotePad--.so';,必须与磁盘上的主业务库文件名一致(含 lib 前缀与 .so 后缀)。

  2. ABI 一致
    entry/build-profile.json5 中的 abiFilters 需包含你编译 .so 时使用的架构(如真机多为 arm64-v8a,模拟器可能为 x86_64)。
    若只编了 arm64-v8a,却打开了 x86_64 过滤,需在对应 ABI 目录补齐同名的 .so 或调整过滤项。

  3. Qt on OHOS 运行时依赖
    QAbilityStage.etsimport qpa from 'libqohos.so',再通过 setupQtApplication 加载你的业务库。除 libNotePad--.so 外,通常还需按 Qt-for-OHOS 要求部署 平台插件、Qt 核心库 等;若缺失,日志中会提示与 qpa / nettool.so 等相关的加载问题,需对照官方说明补齐 entry 下各 ABI 的 libs 布局。

  4. HAP 打包与签名
    原生库随 entry 模块打入 HAP;使用 DevEco Studio 的 自动签名 或你的发布证书完成签名后,安装到鸿蒙 PC 真机验证。


八、小结

  • 传统 Qt PC:CMake/Qt Creator → 可执行文件
  • 鸿蒙 Qt 应用(本方案):同一套 Qt 业务代码 → CMake 在 OHOS 工具链 + Qt-for-OHOS 下 → libNotePad--.so → DevEco ArkTS 壳 加载 → HAP 上真机运行。

当前仓库已把 CMake 的 OHOS 分支ArkTS 的 APP_LIBRARY_NAME 对齐;你只需按机器路径完成 SDK/Qt 配置编译出 .so 并放入工程约定位置,即可在鸿蒙 PC 上完成端到端验证与后续迭代。

参考链接

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真模型展开研究,基于Simulink平台构建了完整的电机控制系统仿真模型,涵盖电机本体建模、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析各模块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践模型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值