我是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的局限性,这种方法似乎不太理想:
第二个选项似乎是QWebKit,允许实时编辑HTML5标记,因此我可以指定自定义标记和HTML5之间的双向转换。我不清楚如何将更改从编辑器实时传播回原始标记,而无需在每次文本更改时重新翻译整个文档。 QWebKit解决方案看起来对我来说非常笨重(学习WebKit和QT)应该是一个相对简单的问题。
我还考虑过使用本机QT容器,标签,图像和其他小部件手动实现自定义类的WYSIWYG。这似乎是最灵活的方法,也是最不可能遇到无法解决的问题的方法。但是,我很确定实现普通文本编辑器的所有细节(选择文本,字体更改,剪切和粘贴支持,撤消/重做,拖动对象,光标放置等)将非常耗时
所以,最后,我的问题是:那里有没有QT专家提出过从这种项目开始的一些建议?
BTW,我使用的是QT,因为该应用程序是一个需要平台独立性的桌面应用程序。
答案 0 :(得分:0)
鉴于我没有在这里得到任何建议,我决定采用QTextEdit
方法,虽然我实际上使用的是设置为可编辑的QTextBrowser
,以便我可以捕获链接导航事件。我将使用QTextCharFormat
的链接名称设置为唯一标识符,以便从QTextEdit
转换回自定义标记。 QTextEdit
已经支持图像,因此我不必处理这些图像。
我想我会遇到最大的障碍,因为我需要能够插入/增长/缩小其单元格可以具有Excel风格功能的表格。我还没有想出整个过程。