鸿蒙综合讨论/文件对话框 shim 重定向

文件对话框 shim 重定向

【踩坑实录】文件对话框 shim 重定向

▍现象
CAD 工程上机后,保存与导出操作弹出白框:应用自己的文件对话框(Qt 原生 QFileDialog)在无 WM 环境里弹出来了,但没有系统目录服务与原生体验支撑——白框悬浮、无法正常浏览保存,用户点不掉也用不了,成为僵尸窗口。

▍定位过程
这类白框的根因在桌面假设:应用的保存命令默认走原生文件对话框,桌面上它由窗口系统与文件服务完整支撑,移植环境里两层支撑都不存在。工程最初绕着修(给对话框喂数据),越修越多毛边——正确答案是斩断源头:保存类命令不再放行进原生对话框。

▍对策
命令入口拦截加重定向:native 侧在命令入口拦截全部保存类命令(保存、另存为、全部保存、导出),不再进入 QFileDialog 流程;新增保存与导出的原生接口(经线程安全函数回调壳层);文件落位走带界面系统选择器(用户经系统界面选位置命名);导出格式选择用原生的动作面板(列表选格式)。工程记录的原话:僵尸白框来源被根除。配套修复:保存状态从单文档升级为按文档绑定(多文档串档的隐患一并解决)。

▍根因抽象
桌面外围件(文件对话框、打印对话框、颜色选择器)的正确移植姿势不是修它,是换它:系统有对应的一等公民组件(选择器、面板),把调用点重定向过去。修一个残废的自绘对话框的工时,够重定向三次。

▍方法论沉淀
移植前的调用点普查:grep 出全部对话框调用(静态对话框调用很好搜),每处标注替代方案(系统选择器、原生面板、应用内实现)。普查表驱动改造,别等症状一个个冒。

白框根除的完整记录在 CAD 工程实录(保存导出全链走系统选择器的细节),apps 板块 56 篇欢迎对照。
楼主 7 天前
想参与讨论?登录 或 30 秒注册。