A
Air官方
wxWidgets 的跨平台方式与 Qt 不同:它不做自绘,而是把控件映射到宿主平台的原生工具包,在 Linux 上这个宿主就是 GTK。所以 wxWidgets 应用上鸿蒙,本质是 wxGTK3 后端路线——搭在 GTK3 共享栈之上。
▍原理
wxWidgets 到 wxGTK 再到 GTK3 再到 GDK 的 OHOS 后端,整条链是三层接力。窗口创建、事件循环、控件渲染逐层下传,触摸事件逐层上传。这个结构的含义是:GTK3 路线踩过的坑,wx 工程大概率要再过一遍;而 GTK3 栈的修复,wx 工程自动继承。电子设计自动化工程(KiCad 内核)就是这条路线的代表。
▍特有的坑
wx 在 GTK 之上还有自己的假设层。真实工程里踩过的典型一例:图标全问号——wx 的图像与图标管理走了桌面图标主题协议,鸿蒙上没有对应服务,图标全部加载失败显示占位符。对策是把图标资源改为随包分发、初始化时显式注册。此外 wx 的鼠标事件语义比 GTK 更细(区分左右滚轮、按住拖动),翻译层要把触摸手势完整还原成 wx 期望的事件序列,否则画布类操作的体验会明显降级。
▍适用场景
上游就是 wxWidgets 写的行业软件(EDA、测绘、老工具类);已经投入大量 wx 私有代码积累的项目。这类应用改写成 Qt 或自绘 UI 的成本通常高于搬整栈。
▍优缺点
优点:可复用 GTK3 栈的全部基础设施;wx 控件面相对小,行为可控。缺点:三层接力让排查定位变难,一个渲染问题要判断出在哪一层;wx 对高 DPI 与触摸的支持弱于现代框架,需要自己做事件桥接补齐。
▍真实用例
Air 系列的 EDA 工程跑通了原理图与 PCB 视图,画布缩放、布线操作都基于这条链工作。它的完整踩坑记录在适配全记录系列里。
更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
▍原理
wxWidgets 到 wxGTK 再到 GTK3 再到 GDK 的 OHOS 后端,整条链是三层接力。窗口创建、事件循环、控件渲染逐层下传,触摸事件逐层上传。这个结构的含义是:GTK3 路线踩过的坑,wx 工程大概率要再过一遍;而 GTK3 栈的修复,wx 工程自动继承。电子设计自动化工程(KiCad 内核)就是这条路线的代表。
▍特有的坑
wx 在 GTK 之上还有自己的假设层。真实工程里踩过的典型一例:图标全问号——wx 的图像与图标管理走了桌面图标主题协议,鸿蒙上没有对应服务,图标全部加载失败显示占位符。对策是把图标资源改为随包分发、初始化时显式注册。此外 wx 的鼠标事件语义比 GTK 更细(区分左右滚轮、按住拖动),翻译层要把触摸手势完整还原成 wx 期望的事件序列,否则画布类操作的体验会明显降级。
▍适用场景
上游就是 wxWidgets 写的行业软件(EDA、测绘、老工具类);已经投入大量 wx 私有代码积累的项目。这类应用改写成 Qt 或自绘 UI 的成本通常高于搬整栈。
▍优缺点
优点:可复用 GTK3 栈的全部基础设施;wx 控件面相对小,行为可控。缺点:三层接力让排查定位变难,一个渲染问题要判断出在哪一层;wx 对高 DPI 与触摸的支持弱于现代框架,需要自己做事件桥接补齐。
▍真实用例
Air 系列的 EDA 工程跑通了原理图与 PCB 视图,画布缩放、布线操作都基于这条链工作。它的完整踩坑记录在适配全记录系列里。
更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
楼主
7 天前