HarmonyOS鸿蒙PC开源QT软件移植:基于 Qt Widgets 的网络调试助手工具

HarmonyOS鸿蒙PC开源QT软件移植:基于 Qt Widgets 的网络调试助手工具
随着OpenHarmony生态向PC端扩展,网络调试工具成为开发者日常工作中不可或缺的工具。NetTool作为一款基于Qt Widgets的开源网络调试助手,支持TCP客户端、TCP服务器、UDP服务器等多种网络通信功能,非常适合移植到HarmonyOS PC平台。本文将详细介绍如何将NetTool移植到HarmonyOS PC环境,为开发者提供一个功能完善的网络调试工具。

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

NetTool在HarmonyOS PC端的优势

NetTool作为一款成熟的网络调试工具,其丰富的网络通信功能和直观的用户界面非常适合移植到HarmonyOS PC平台。

通过移植,NetTool将能够:

  1. 充分利用Qt Widgets:NetTool基于Qt Widgets模块,可以无缝适应HarmonyOS PC的桌面环境。
  2. 多种网络协议支持:支持TCP客户端、TCP服务器、UDP服务器等多种网络通信模式。
  3. 数据格式灵活:支持多种数据格式的发送和接收,满足不同调试需求。
  4. 跨平台一致性:保持与原版NetTool一致的用户界面和功能,减少学习成本。
在这里插入图片描述


通过移植,相信大家也能够理解如何基于Qt的Qt Widgets开发鸿蒙PC上的应用了。至于界面和布局的开发,当然还是用qtcreator这个工具可视化编辑*.ui界面文件了。

移植成功的项目源码开源地址https://gitcode.com/qq8864/nettool-hmos

环境搭建与配置

文档适用范围

  • HarmonyOS API 12 及以上版本
  • Qt for OpenHarmony (基于 Qt 5.15)
  • DevEco Studio 5.0 及以上版本

前置条件

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

1. DevEco Studio下载与安装

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

2. Qt SDK下载与配置

2.1 获取Qt for OpenHarmony SDK

从发布页面下载适用于你开发平台(Windows或Mac)的SDK压缩包。

2.2 安装与验证Qt for OpenHarmony SDK

Mac平台示例:

验证安装。

cd ~/QtForOpenHarmony/bin ./qmake -query

如果输出中包含 QMAKE_XSPEC:oh-clang,则表明Qt for OpenHarmony SDK安装成功。

打开终端,创建目录并解压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 

Windows平台注意:

  • 使用解压工具(如7-Zip)将SDK压缩包解压到指定目录,例如 C:\QtForOpenHarmony
  • 后续在DevEco Studio配置中,使用对应的Windows路径。

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

下载与准备NetTool源码

  1. 下载NetTool源码源码地址

解压源码:将下载的源码包解压到一个工作目录,例如 ~/Projects/nettool-hmos
源码可直接放置到 entry/src/main/cpp目录。

在这里插入图片描述

创建HarmonyOS工程

1. 新建HarmonyOS工程

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

2. 修改为OpenHarmony工程

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

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

点击"Sync Now"同步工程。

3. 工程配置调整

3.1 修改Native编译配置

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

"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.3 配置UIAbility

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

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

项目结构解析

NetTool项目采用模块化设计,主要目录结构如下:

nettool-hmos/ ├── entry/ │ ├── src/main/ │ │ ├── cpp/ # C++ 源代码 │ │ │ ├── api/ # 核心 API 模块 │ │ │ │ ├── app.cpp/.h # 应用配置管理 │ │ │ │ ├── quiwidget.cpp/.h # UI 辅助类 │ │ │ │ └── tcpserver.cpp/.h # TCP 服务器实现 │ │ │ ├── file/ # 资源文件 │ │ │ │ ├── device.txt # 设备配置 │ │ │ │ └── send.txt # 发送数据配置 │ │ │ ├── form/ # 界面模块 │ │ │ │ ├── frmmain.cpp/.h/.ui # 主窗口 │ │ │ │ ├── frmtcpclient.cpp/.h/.ui # TCP 客户端 │ │ │ │ ├── frmtcpserver.cpp/.h/.ui # TCP 服务器 │ │ │ │ └── frmudpserver.cpp/.h/.ui # UDP 服务器 │ │ │ ├── other/ # 其他资源 │ │ │ │ ├── main.ico # 应用图标 │ │ │ │ ├── main.qrc # 资源文件 │ │ │ │ └── qt_zh_CN.qm # 中文翻译 │ │ │ ├── snap/ # 截图资源 │ │ │ ├── CMakeLists.txt # CMake 构建配置 │ │ │ ├── main.cpp # 应用入口 │ │ │ └── nettool.pro # Qt 项目文件 │ │ ├── ets/ # ArkTS 代码 │ │ │ ├── entryability/ # 应用生命周期管理 │ │ │ └── pages/ # Index 页面 │ │ └── module.json5 # 模块配置 │ └── libs/ # 依赖库 └── README.md # 项目说明 

关键代码实现

1. 入口函数配置

使用标准Qt应用入口main()函数,确保应用正确初始化:

// main.cpp#include<QApplication>#include<QSurfaceFormat>#include<QTranslator>#include"form/frmmain.h"intmain(int argc,char*argv[]){ QApplication a(argc, argv);// 配置OpenGL ES表面格式 QSurfaceFormat format; format.setAlphaBufferSize(8); format.setBlueBufferSize(8); format.setGreenBufferSize(8); format.setRedBufferSize(8); format.setDepthBufferSize(24); format.setStencilBufferSize(8); format.setRenderableType(QSurfaceFormat::OpenGLES); format.setVersion(3,0);QSurfaceFormat::setDefaultFormat(format);// 设置应用信息 a.setApplicationName("NetTool"); a.setOrganizationName("HarmonyOS Developer");// 加载中文翻译 QTranslator translator;if(translator.load(":/other/qt_zh_CN.qm")){ a.installTranslator(&translator);}// 显示主窗口 frmMain w; w.show();return a.exec();}

2. CMakeLists.txt配置

创建CMakeLists.txt文件,配置项目构建选项:

cmake_minimum_required(VERSION 3.16) project(nettool VERSION 1.0.0) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) #设置qt SDK路径 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 Network Concurrent ) # 添加源文件 file(GLOB UI_SRC ${PROJECT_SOURCE_DIR}/form/*.ui ) aux_source_directory(${PROJECT_SOURCE_DIR}/api API_SRC) aux_source_directory(${PROJECT_SOURCE_DIR}/form FORM_SRC) # 创建共享库(HarmonyOS要求) add_library(${PROJECT_NAME} SHARED ${API_SRC} ${FORM_SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/main.cpp ${PROJECT_SOURCE_DIR}/other/main.qrc ) # 包含目录 target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/api ${PROJECT_SOURCE_DIR}/form ) # 链接库 target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Concurrent # 链接鸿蒙平台插件 ${QT_PREFIX}/plugins/platforms/libplugins_platforms_qopenharmony.so ) 

3. 主窗口实现

主窗口frmmain.cpp负责整合各个功能模块:

// frmmain.cpp#include"frmmain.h"#include"ui_frmmain.h"#include"frmtcpclient.h"#include"frmtcpserver.h"#include"frmudpserver.h" frmMain::frmMain(QWidget *parent):QMainWindow(parent),ui(new Ui::frmMain){ ui->setupUi(this);// 设置窗口属性setWindowTitle("NetTool - HarmonyOS网络调试助手");resize(1024,768);// 初始化标签页initTabs();// 连接信号槽connect(ui->actionExit,&QAction::triggered,this,&frmMain::close);connect(ui->actionAbout,&QAction::triggered,this,&frmMain::showAbout);// 设置状态栏statusBar()->showMessage("就绪 - HarmonyOS网络调试助手");}frmMain::~frmMain(){delete ui;}void frmMain::initTabs(){// TCP客户端 frmTcpClient *tcpClient =newfrmTcpClient(this); ui->tabWidget->addTab(tcpClient,"TCP客户端");// TCP服务器 frmTcpServer *tcpServer =newfrmTcpServer(this); ui->tabWidget->addTab(tcpServer,"TCP服务器");// UDP服务器 frmUdpServer *udpServer =newfrmUdpServer(this); ui->tabWidget->addTab(udpServer,"UDP服务器");}void frmMain::showAbout(){QMessageBox::about(this,"关于NetTool","<h3>NetTool - HarmonyOS网络调试助手</h3>""<p>版本: 1.0.0</p>""<p>基于Qt Widgets移植到HarmonyOS PC平台</p>""<p>支持TCP客户端、TCP服务器、UDP服务器等功能</p>""<p>© 2024 HarmonyOS开发者社区</p>");}

4. TCP客户端实现

TCP客户端模块frmtcpclient.cpp实现网络连接功能:

// frmtcpclient.cpp#include"frmtcpclient.h"#include"ui_frmtcpclient.h"#include<QTcpSocket>#include<QMessageBox> frmTcpClient::frmTcpClient(QWidget *parent):QWidget(parent),ui(new Ui::frmTcpClient),tcpSocket(newQTcpSocket(this)){ ui->setupUi(this);// 连接信号槽connect(ui->btnConnect,&QPushButton::clicked,this,&frmTcpClient::onConnect);connect(ui->btnDisconnect,&QPushButton::clicked,this,&frmTcpClient::onDisconnect);connect(ui->btnSend,&QPushButton::clicked,this,&frmTcpClient::onSend);connect(tcpSocket,&QTcpSocket::connected,this,&frmTcpClient::onConnected);connect(tcpSocket,&QTcpSocket::disconnected,this,&frmTcpClient::onDisconnected);connect(tcpSocket,&QTcpSocket::readyRead,this,&frmTcpClient::onReadyRead);connect(tcpSocket,QOverload<QAbstractSocket::SocketError>::of(&QTcpSocket::error),this,&frmTcpClient::onError);}frmTcpClient::~frmTcpClient(){delete ui;}void frmTcpClient::onConnect(){ QString ip = ui->txtIP->text();int port = ui->txtPort->text().toInt(); tcpSocket->connectToHost(ip, port);}void frmTcpClient::onDisconnect(){ tcpSocket->disconnectFromHost();}void frmTcpClient::onSend(){if(!tcpSocket->isOpen()){QMessageBox::warning(this,"警告","请先连接到服务器");return;} QString data = ui->txtSend->toPlainText();if(data.isEmpty()){return;} tcpSocket->write(data.toUtf8()); ui->txtReceive->append("发送: "+ data);}void frmTcpClient::onConnected(){ ui->txtReceive->append("已连接到服务器"); ui->btnConnect->setEnabled(false); ui->btnDisconnect->setEnabled(true);}void frmTcpClient::onDisconnected(){ ui->txtReceive->append("已断开连接"); ui->btnConnect->setEnabled(true); ui->btnDisconnect->setEnabled(false);}void frmTcpClient::onReadyRead(){ QByteArray data = tcpSocket->readAll(); ui->txtReceive->append("接收: "+QString::fromUtf8(data));}void frmTcpClient::onError(QAbstractSocket::SocketError error){Q_UNUSED(error) ui->txtReceive->append("错误: "+ tcpSocket->errorString());}

构建与运行

1. 命令行构建

# 清理构建 hvigorw clean # 构建项目 hvigorw assembleHap # 安装到设备 hdc install entry/build/default/outputs/default/entry-default-signed.hap 

2. DevEco Studio构建

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

3. 运行应用

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

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

功能特性

NetTool移植到HarmonyOS PC平台后,保留了以下核心功能:

1. TCP客户端

  • 支持连接到远程TCP服务器
  • 支持发送和接收文本数据
  • 实时显示连接状态

2. TCP服务器

  • 支持创建TCP服务器,监听指定端口
  • 支持多客户端连接管理
  • 支持向指定客户端发送数据

3. UDP服务器

  • 支持UDP数据的接收和发送
  • 支持指定目标IP和端口发送数据
  • 实时显示接收到的UDP数据

4. 数据管理

  • 支持自定义发送数据
  • 支持保存发送历史
  • 支持多种数据格式显示(文本、十六进制)

5. 用户界面

  • 基于Qt Widgets设计,操作简单直观
  • 标签页式布局,功能模块清晰
  • 支持中英文界面切换

调试与问题解决(FAQ)

1. 常见问题解决

  1. 库文件缺失:确保所有Qt库文件已正确拷贝到libs目录

架构不匹配:确认设备架构与abiFilters配置一致
注意,你的CMakeLists.txt`文件中,工程的名字是project(nettool VERSION 1.0.0)。因此,这里的名字要为libnettool.so:

在这里插入图片描述

网络权限问题:在module.json5中申请网络权限:

"requestPermissions":[{"name":"ohos.permission.INTERNET"}]

运行效果截图

在这里插入图片描述


当前存在的问题:虽然功能正常,但界面有些失真,尤其是字体和按钮大小,当前显示的字体明显偏小,跟最前面截图的效果差异明显。这些问题相信在后续的版本中肯定会解决,敬请关注!

未来展望

NetTool在HarmonyOS PC平台的应用开发具有重要价值:

  1. 开发者工具生态:丰富HarmonyOS PC平台的开发者工具,提高开发效率
  2. 网络调试标准化:为HarmonyOS应用开发提供标准的网络调试工具
  3. 跨设备调试:结合HarmonyOS分布式能力,实现跨设备网络调试
  4. 生态建设:推动HarmonyOS PC应用生态的快速成熟

随着HarmonyOS PC生态的完善,NetTool将成为开发者网络调试的重要工具,为HarmonyOS应用开发提供有力支持。

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

Read more

最新 neo4j 5.26版本下载安装配置步骤(新手必备)

最新 neo4j 5.26版本下载安装配置步骤(新手必备)

目录 初识:neo4j 安装环境要求 一、下载Neo4j 二、配置环境变量 三、启动测试 四、常用命令及配置 创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭!!!违者必究!!! 初识:neo4j Neo4j是一个高性能的NoSQL图形数据库,它将结构化数据存储在网络(从数学角度称为图)上而不是传统的表中。‌ Neo4j是一个嵌入式的、基于磁盘的、具备完全事务特性的Java持久化引擎,特别适合处理具有复杂关系的数据‌。 安装环境要求 * 操作系统:Windows 10/8/7、macOS 10.13或更高版本、Linux(Ubuntu、CentOS、Red Hat 等) * JDK 17 或更高版本(Neo4j

By Ne0inhk
【论文翻译】YOLO26: KEY ARCHITECTURAL ENHANCEMENTS AND PERFORMANCE BENCHMARKING FOR REAL-TIME OBJECT DETEC

【论文翻译】YOLO26: KEY ARCHITECTURAL ENHANCEMENTS AND PERFORMANCE BENCHMARKING FOR REAL-TIME OBJECT DETEC

YOLO26:实时目标检测的关键架构改进与性能基准测试 摘要 本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其在实时边缘目标检测领域的关键架构改进与性能基准测试结果。YOLO26于2025年9月发布,是YOLO系列中最新、最先进的模型,专为在边缘设备和低功耗设备上实现高效能、高精度和部署就绪性而设计。论文依次详细介绍了YOLO26的架构创新,包括移除分布焦点损失(DFL)、采用端到端无非极大值抑制(NMS)推理、集成渐进式损失(ProgLoss)和小目标感知标签分配(STAL),以及引入MuSGD优化器以实现稳定收敛。除架构外,该研究将YOLO26定位为多任务框架,支持目标检测、实例分割、姿态/关键点估计、旋转检测和分类任务。我们在NVIDIA Jetson Nano和Orin等边缘设备上对YOLO26进行了性能基准测试,并将其结果与YOLOv8、YOLOv11、YOLOv12、YOLOv13以及基于Transformer的检测器进行了对比。论文进一步探讨了实时部署路径、灵活的导出选项(ONNX、TensorRT、CoreML、TFLite)以及INT8/

By Ne0inhk
Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案

Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案

声明:文章为本人真实测评博客,非广告,并没有推广该平台 ,为用户体验文章 目录 * 前言 * 一.核心工具与优势解析 * 低代码高效开发 * 专业视觉设计 * 高度灵活可定制 * AI赋能创新 * 二.操作步骤:从安装到生成效果 * 第一步. 获取MCP配置代码 * 第二步:下载 * 第三步:在 Trae 中导入 MCP 配置并建立连接 * 三. 实战:用Vizro MCP快速构建仪表板 * 1. 提出需求 * 2.智能体生成代码 * 3.查看运行结果 * 4.优化与部署 * 四.Vizro MCP核心功能解析 * get_vizro_chart_or_dashboard_plan * get_model_json_

By Ne0inhk

比 OpenClaw 轻 99%!我用 nanobot 搭了个 QQ AI 机器人,还顺手贡献了代码

❝ 4000 行代码,打造你的私人 AI 助手❞ 前言 最近 AI Agent 领域有个项目特别火——「OpenClaw」,它是一个功能强大的 AI 助手框架,能让你拥有一个 7×24 小时在线的智能助理。 但当我 clone 下来准备研究时,发现它有 「43 万行代码」!对于想快速上手或做二次开发的个人开发者来说,这个体量实在太重了。 直到我发现了它的"轻量版"——「nanobot」。 nanobot:99% 的瘦身,核心功能全保留 nanobot 来自香港大学数据科学实验室(HKUDS),它的设计理念很简单: ❝ 用最少的代码,实现 AI Agent 的核心能力❞ 来看一组对比数据: 项目 代码行数 核心功能 OpenClaw 430,

By Ne0inhk