使用QT为自定义标记语言构建WYSIWYG编辑器

时间:2010-03-09 05:28:20

标签: qt webkit wysiwyg markup

我是QT的新手,我正在尝试找出为自定义标记语言创建WYSIWYG编辑器小部件的最佳方法,该语言显示简单的文本,图像和链接。我需要能够将更改从WYSIWYG编辑器传播到自定义标记表示。

作为问题域的具体示例,假设自定义标记可能具有“播放器”标记,其中包含播放器名称和团队名称。标记可能如下所示:

Last week, <player id="1234"><name>Aaron Rodgers</name><team>Packers</team></player> threw a pass.
此文本将在编辑器中显示为:

上周, Aaron Rodgers of the Packers投了一张通行证。

玩家姓名和团队名称可以在标准的WYSIWYG方式直接在编辑器中编辑,这样我的用户就不必学习任何标记。此外,当玩家姓名被鼠标悬停时,将显示有关该玩家的详细信息弹出窗口,同样适用于该团队。

经过长时间的介绍,我试图找出从QT开始的地方。似乎最合乎逻辑的选择是使用QTextDocument的Rich Text API。鉴于QTextDocument的局限性,这种方法似乎不太理想:

  • 我无法弄清楚如何通过点击链接捕获导航事件。
  • 只有在QTextEdit为readonly时才会启用以下链接。
  • 在复制和粘贴操作中忽略实现QTextObjectInterface的自定义对象
  • 任何基于HTML的标记作为Rich Text传递给它都会被重新转换为一系列span标记和许多其他垃圾,这使得将更改从编辑器传播回原始自定义标记变得非常困难。

第二个选项似乎是QWebKit,允许实时编辑HTML5标记,因此我可以指定自定义标记和HTML5之间的双向转换。我不清楚如何将更改从编辑器实时传播回原始标记,而无需在每次文本更改时重新翻译整个文档。 QWebKit解决方案看起来对我来说非常笨重(学习WebKit和QT)应该是一个相对简单的问题。

我还考虑过使用本机QT容器,标签,图像和其他小部件手动实现自定义类的WYSIWYG。这似乎是最灵活的方法,也是最不可能遇到无法解决的问题的方法。但是,我很确定实现普通文本编辑器的所有细节(选择文本,字体更改,剪切和粘贴支持,撤消/重做,拖动对象,光标放置等)将非常耗时

所以,最后,我的问题是:那里有没有QT专家提出过从这种项目开始的一些建议?

BTW,我使用的是QT,因为该应用程序是一个需要平台独立性的桌面应用程序。

1 个答案:

答案 0 :(得分:0)

鉴于我没有在这里得到任何建议,我决定采用QTextEdit方法,虽然我实际上使用的是设置为可编辑的QTextBrowser,以便我可以捕获链接导航事件。我将使用QTextCharFormat的链接名称设置为唯一标识符,以便从QTextEdit转换回自定义标记。 QTextEdit已经支持图像,因此我不必处理这些图像。

我想我会遇到最大的障碍,因为我需要能够插入/增长/缩小其单元格可以具有Excel风格功能的表格。我还没有想出整个过程。

相关问题