我有兴趣创建一个行为类似于代码区域的文本对象类型(继承QTextObjectInterface ):
- 独特的背景
- 边界
- 固定宽度字体
- 可编辑的内容
- 实例需要可识别代码,以便可以提取其中的内容(将代码与周围内容分开)
- 保存/加载(来自常规 html 文件)
- 语法高亮将是一个加号,但并不是真正需要的
文档的其他区域需要以通常的方式运行(字体属性可编辑、颜色可编辑等)。
Qt 提供了一个使用QTextEdit实现自定义文本对象的示例。这看起来很难,因为新的文本对象不能利用 QTextEdit / QTextDocument中的现有基础设施。
可以将QTextDocument的各个部分组合在一起的不同类型对象的基类
所以继承它可能是一种选择,但它在 Qt SDK 包中的源文件和谷歌搜索都没有显示有用的信息。
QTextFrame继承QTextObject因此,如果要找到有关此路径的一些提示,它可能是一个可行的基类。
在一个简单的 HTML 文件中,所有这些(语法高亮除外)都很容易。QTextEdit以 html 作为输入,并且能够导出 html,但在此过程中结构丢失。
<code class="code-sample">
int i = 0;
</code>
顺便说一下, QWebView是只读的。它宣传说:
HTML 文档的一部分可以通过 HTML 元素的 contenteditable 属性进行编辑。
可能还有其他平台可以随时使用,但文本编辑器需要在 Qt Creator 中作为插件使用,因此使用 Qt 框架是有意义的。
底线:如何在QTextEdit小部件中实现代码区域?
后期编辑:
- 使用来自主干的 Qt sdk(将自身标识为 4.8.4)
- 来自主干的 Qt Creator (Qt Creator 2.6.81)