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官方版本。
- 社区项目地址:https://atomgit.com/openharmony-sig/qt
- SDK下载链接:https://atomgit.com/openharmony-sig/qt/releases
NetTool在HarmonyOS PC端的优势
NetTool作为一款成熟的网络调试工具,其丰富的网络通信功能和直观的用户界面非常适合移植到HarmonyOS PC平台。
通过移植,NetTool将能够:
- 充分利用Qt Widgets:NetTool基于Qt Widgets模块,可以无缝适应HarmonyOS PC的桌面环境。
- 多种网络协议支持:支持TCP客户端、TCP服务器、UDP服务器等多种网络通信模式。
- 数据格式灵活:支持多种数据格式的发送和接收,满足不同调试需求。
- 跨平台一致性:保持与原版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 及以上版本
前置条件
- 安装DevEco Studio 5.0及以上版本
- 下载并配置Qt for OpenHarmony SDK
- 了解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源码
- 下载NetTool源码:源码地址
解压源码:将下载的源码包解压到一个工作目录,例如 ~/Projects/nettool-hmos。
源码可直接放置到 entry/src/main/cpp目录。

创建HarmonyOS工程
1. 新建HarmonyOS工程
- 打开DevEco Studio,选择"Create Project"。
- 选择"Native C++"模板。
- 配置工程信息:
- Project Name:
NetTool - Bundle Name:
com.example.nettool - Save Location: 工程保存路径(如
~/Projects/nettool-hmos) - Compile SDK: 选择API 12或更高版本
- Model: 选择"Stage"
- Project Name:
- 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 拷贝依赖文件
- 拷贝ets文件:将Qt SDK下的
openharmony/qtbase目录内容复制到src/main/ets目录(直接覆盖)。 - 拷贝库文件:将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构建
- 在DevEco Studio中,点击"Build" → “Build HAP(s)”
- 等待构建完成,确保无编译错误
3. 运行应用
由于目前HarmonyOS PC模拟器可能尚未普及,建议在真实PC设备上运行。
- 真实PC设备
- 准备已刷入HarmonyOS PC版的设备
- 通过USB连接设备
- 在DevEco Studio中选择目标设备
- 点击运行按钮,应用将自动安装并启动
- 远程调试
- 配置PC设备的远程调试选项
- 在DevEco Studio中配置远程连接
- 部署并运行应用
功能特性
NetTool移植到HarmonyOS PC平台后,保留了以下核心功能:
1. TCP客户端
- 支持连接到远程TCP服务器
- 支持发送和接收文本数据
- 实时显示连接状态
2. TCP服务器
- 支持创建TCP服务器,监听指定端口
- 支持多客户端连接管理
- 支持向指定客户端发送数据
3. UDP服务器
- 支持UDP数据的接收和发送
- 支持指定目标IP和端口发送数据
- 实时显示接收到的UDP数据
4. 数据管理
- 支持自定义发送数据
- 支持保存发送历史
- 支持多种数据格式显示(文本、十六进制)
5. 用户界面
- 基于Qt Widgets设计,操作简单直观
- 标签页式布局,功能模块清晰
- 支持中英文界面切换
调试与问题解决(FAQ)
1. 常见问题解决
- 库文件缺失:确保所有Qt库文件已正确拷贝到libs目录
架构不匹配:确认设备架构与abiFilters配置一致
注意,你的CMakeLists.txt`文件中,工程的名字是project(nettool VERSION 1.0.0)。因此,这里的名字要为libnettool.so:

网络权限问题:在module.json5中申请网络权限:
"requestPermissions":[{"name":"ohos.permission.INTERNET"}]运行效果截图

当前存在的问题:虽然功能正常,但界面有些失真,尤其是字体和按钮大小,当前显示的字体明显偏小,跟最前面截图的效果差异明显。这些问题相信在后续的版本中肯定会解决,敬请关注!
未来展望
NetTool在HarmonyOS PC平台的应用开发具有重要价值:
- 开发者工具生态:丰富HarmonyOS PC平台的开发者工具,提高开发效率
- 网络调试标准化:为HarmonyOS应用开发提供标准的网络调试工具
- 跨设备调试:结合HarmonyOS分布式能力,实现跨设备网络调试
- 生态建设:推动HarmonyOS PC应用生态的快速成熟
随着HarmonyOS PC生态的完善,NetTool将成为开发者网络调试的重要工具,为HarmonyOS应用开发提供有力支持。
欢迎加入开源鸿蒙开发者社区交流:https://harmonypc.ZEEKLOG.net/