A
Air官方
【踩坑实录】MDI 子窗标签化改造
▍现象
科学绘图类工程(Qt Widgets 桌面程序)上机后:主窗口能渲染,但多文档界面(MDI)的子窗口行为全乱——子窗不能拖动、层叠错乱、切换失灵。桌面上的多窗口肌肉记忆,在单表面环境里全部失效。
▍定位过程
这类应用(工程对象是经典 Qt Widgets 程序)的窗口假设写在基因里:主窗是应用窗口、MDI 子窗可拖拽浮动、弹出文件对话框、启动画面——全部假设有一个窗口管理器(WM)在协调。而移植环境的现实:只有一块合成表面,没有 WM。子窗的浮动、层叠、拖拽都依赖 WM 的窗口操作协议,直接编译出来只能得到无法交互的空壳(工程记录原文:把它们搬进无窗口管理器的单表面环境,是比渲染出画面深一层的问题)。
▍根因
MDI 的交互模型(多窗浮动)与单表面环境(一切都在一块表面上)结构性冲突。这不是渲染 bug,是交互范式断层。
▍对策
工程的改造方案:MDI 区域整体切换为标签页视图(Qt 的 MDI 区域本身支持标签化形态——子窗从浮动改为标签,一次只见一窗、标签切换文档);菜单栏接管(原生菜单 ArkTS 化——菜单树导出回注的流水线);文件对话框与启动画面这些独立顶层窗逐个改道(系统选择器替代、启动画面直接砍掉——下篇实录的主题)。改造后的多文档体验:标签页切换顺滑,反而比缩在小平板上的浮动子窗更适合触摸。
▍方法论沉淀
桌面范式的移植三选一:改造(范式换成移动友好的等价物——本案)、降级(保留形态但限制能力)、裁剪(明确不做并登记)。拖着不改是最差选项——坏掉的交互比没有更伤体验。
MDI 标签化的完整改造记录在科学绘图工程实录,apps 板块 56 篇欢迎对照。
▍现象
科学绘图类工程(Qt Widgets 桌面程序)上机后:主窗口能渲染,但多文档界面(MDI)的子窗口行为全乱——子窗不能拖动、层叠错乱、切换失灵。桌面上的多窗口肌肉记忆,在单表面环境里全部失效。
▍定位过程
这类应用(工程对象是经典 Qt Widgets 程序)的窗口假设写在基因里:主窗是应用窗口、MDI 子窗可拖拽浮动、弹出文件对话框、启动画面——全部假设有一个窗口管理器(WM)在协调。而移植环境的现实:只有一块合成表面,没有 WM。子窗的浮动、层叠、拖拽都依赖 WM 的窗口操作协议,直接编译出来只能得到无法交互的空壳(工程记录原文:把它们搬进无窗口管理器的单表面环境,是比渲染出画面深一层的问题)。
▍根因
MDI 的交互模型(多窗浮动)与单表面环境(一切都在一块表面上)结构性冲突。这不是渲染 bug,是交互范式断层。
▍对策
工程的改造方案:MDI 区域整体切换为标签页视图(Qt 的 MDI 区域本身支持标签化形态——子窗从浮动改为标签,一次只见一窗、标签切换文档);菜单栏接管(原生菜单 ArkTS 化——菜单树导出回注的流水线);文件对话框与启动画面这些独立顶层窗逐个改道(系统选择器替代、启动画面直接砍掉——下篇实录的主题)。改造后的多文档体验:标签页切换顺滑,反而比缩在小平板上的浮动子窗更适合触摸。
▍方法论沉淀
桌面范式的移植三选一:改造(范式换成移动友好的等价物——本案)、降级(保留形态但限制能力)、裁剪(明确不做并登记)。拖着不改是最差选项——坏掉的交互比没有更伤体验。
MDI 标签化的完整改造记录在科学绘图工程实录,apps 板块 56 篇欢迎对照。
楼主
7 天前