【发布时间】:2011-04-10 19:33:12
【问题描述】:
我正在开发一个所见即所得的文档编辑器。该编辑器是围绕 Qt 框架构建的,因为 Linux/KDE 是它将运行的主要平台。
到目前为止,我一直在使用 QTextEdit 小部件,并且已经获得了基本的文本编辑和格式设置。但是,我对如何实现以下要求陷入了停顿:
一个文档被分成多个级别的标题,并且顶部必须有一个自动生成的目录。
您应该能够为文本段落选择样式(标题 1、标题 2、...、段落),如果您选择标题样式,则该行将以节号为前缀。
例如,包含文本“设计规范”且样式为“标题 3”的段落可能显示为:
3.4.2 设计规范
自动生成带前缀的节号“3.4.2”。当在其上方插入和删除标题时,节号应更新。用户不应自己修改或删除此前缀。如果他们确实删除了前缀,则该段落应恢复为“paragraph”样式,而不是保留标题。
当标题被插入/修改/删除时,目录应该会自动更新。用户也不应该能够修改或删除目录。
我不知道如何在我的编辑器中实现该功能。我正在考虑存储一棵不可编辑范围的树(包括目录和每个前缀的范围),并且每次光标位置/当前选择更改时,如果选择重叠,我会将 QTextEdit 控件设置为只读或光标在一个范围内。但随之而来的问题是,每次修改某些内容时都要使所有这些范围保持最新(重建树),这在所见即所得的编辑器中很常见。
我不知道如何继续,我将不胜感激有关此问题的任何建议。
【问题讨论】:
-
我也许可以使目录和段落前缀的对象继承自 QTextObjectInterface。这至少会使它们不可编辑,但我不确定不可删除。而且似乎无法知道何时更改位置以更新节编号。
标签: qt editor widget wysiwyg qtextedit