[0624] 为 LaTeX 导出添加基于 Qt QProgressBar 的弹窗进度条支持,并实现平滑动画更新#3521
Open
JackYansongLi wants to merge 9 commits into
Open
[0624] 为 LaTeX 导出添加基于 Qt QProgressBar 的弹窗进度条支持,并实现平滑动画更新#3521JackYansongLi wants to merge 9 commits into
JackYansongLi wants to merge 9 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[0624] 为 LaTeX 导出添加基于 Qt QProgressBar 的弹窗进度条支持,并实现平滑动画更新
Mogan 在导出包含大量图片(如数学公式、Gnuplot 绘图、图形剪裁等)的文档为 LaTeX 时,会逐一执行图片转换并渲染产生外部独立的
.pdf/.eps等格式。当图片较多时,该导出过程需要一定的时间。本项目参照 0623.md 在 HTML 导出中的进度条实践,为 LaTeX 导出实现了完全自包含、美观且极具动感的 Qt QProgressBar 弹窗进度条。进度条实现了精美的插值微休眠平滑滑行动画(10% 级细粒度),消除了界面假死与视觉生硬感。同时对底层进行严密强隔离设计:进度条仅在 GUI 模式下启用,当从命令行、测试框架或 headless 模式下调用 tmu -> latex 时,保持 100% 绝对静默与安全。
1 相关文档
2 任务相关的代码文件
src/Plugins/Tex/tex.hppsrc/Plugins/Tex/inittex.cppsrc/Scheme/Plugins/glue_tex.luaTeXmacs/plugins/latex/progs/convert/latex/tmtex.scmTeXmacs/progs/convert/latex/tmtex.scmTeXmacs/tests/0624.scmTeXmacs/tests/tmu/0624_quantum.tmu3 如何测试
3.1 确定性测试(集成测试)
运行新编写的 TDD 自动化集成测试,验证 LaTeX 导出在重度图片任务(如 Gnuplot 绘图)和真实复杂的量子 Notes 导出中,进度条各个阶段被正确触发,以及核心数学与算符在 LaTeX 下的精准转译:
3.2 非确定性测试(文档验证)
TeXmacs/tests/tmu/0624_quantum.tmu。-headless转换或测试,验证绝对静默、不出现任何弹窗且 100% 无崩溃:4 如何提交
提交前执行以下最少步骤:
*** checks *** : 18 correct, 0 failed.:5 What
src/Plugins/Tex/与 Scheme 的convert/latex/tmtex.scm)进行开发,不染指、不修改任何不相关的外部插件(如 HTML 插件、PDF 插件等)的代码。QDialog的弹窗进度条。在 C++ 侧,自定义QDialog采用QVBoxLayout与QHBoxLayout布局,包含QLabel、QProgressBar和QPushButton(取消按钮),通过 QSS 样式表锁定外框颜色(border: 1px solid grey;),并在latex_progress_start中引入QThread::msleep(50)线程休眠,配合QCoreApplication::processEvents()强制刷新,彻底解决了 macOS 等平台下进度条重绘假死的缺陷。QApplication::instance()与qobject_cast<QApplication*>严密防护,不展示任何进度条或弹窗,确保 100% 绝对静默、免崩溃安全运行。0-100,并引入了基于(target - prev) / 10的百分比插值平滑动画机制,通过 15ms 的微休眠(QThread::msleep(15))和强制重绘,将原本离散、生硬突跳的进度更新重构为 10% 级极佳细粒度的平滑滑行动画,彻底解决视觉生硬问题。tmtex-image-progress与多元素进度推演:将原本用于生成图片文件名的tmtex-serial序号与进度条更新逻辑彻底解耦,引入专属、精确递增的tmtex-image-progress计数器。同时,将进度条解析器tmtex-count-images与更新钩子扩展到所有主要物理和结构元素(包括:段落para、表格table/tformat、公式与方程组equation/eqnarray/equation*/eqnarray*、章节标题section/subsection/subsubsection以及各类图像image/graphics等),使得即使导出完全不含图片的纯文本笔记,也能拥有完整展示排版精细进度、流畅步进的进度条动画,彻底解决无图文档不弹进度条的缺陷。0624_quantum.tmu,编写了专属的test-quantum-latex-export单元测试。该测试全自动运行 LaTeX 导出并载入转译结果,利用严格的断言验证物理数学算符(如\hbar(普朗克常数)、\psi(波函数)、\langle与\rangle(狄拉克算符)、\nabla(哈密顿梯度算符))被 100% 精确转译。同时,测试对新引入的多元素进度机制进行验证,断言其在导出该纯文本笔记时完美触发了进度开始、多阶段递增与进度完成。inittex.cpp层的latex_progress_start方法中加入了极高密度的安全性判断。在初始化新弹窗前,会自动检查上一次是否由于用户主动取消或重复调用而存在未被析构的进度窗口,若存在则自动安全关闭并 delete,彻底消除潜在的内存泄漏风险。同时,编写了test-progress-bar-boundary-safety鲁棒性测试,直接对(latex-progress-start 0)、-5及超界百分比进行极限边界压力测试,确保 C++ 端绝对 100% 零崩溃、零假死运行。6 Why
QDialog或实例化 QWidget,不仅会让 CLI 运行环境大打折扣,更会由于 Qt QGuiApplication 缺失而直接引发SIGABRT崩溃。所以必须在 C++ 侧对QApplication::instance()进行健全的类型和非空判断,提供强隔离防护。7 How
src/Scheme/Plugins/glue_tex.lua中声明latex-progress-start、latex-progress-update与latex-progress-end的绑定关系,并在tex.hpp/inittex.cpp中定义并实现其 Qt GUI 和 Headless 隔离逻辑。tmtex.scm中定义tmtex-count-images,采用递归深度遍历,不仅精准判定图片、更兼顾段落、表格、公式、方程组与章节标题。并在texmacs->latex的开始与结束阶段,利用(latex-progress-start)与(latex-progress-end)分别声明进度状态生命周期。tmtex-eps/tmtex-as-eps(图片生成入口),以及tmtex-para(段落)、tmtex-table(表格)、tmtex-sectional(章节)、tmtex-equation/tmtex-eqnarray(公式方程组)等关键结构变换入口,切入(tmtex-image-increment)计数累加器,确保每次翻译大段内容或处理结构时进度条数值被精确推动和步进渲染。