Qt 富文本开发(初级)

目标

开发一个结构化的简单的带格式的纯文字编辑器,要求文档结构固定。

Qt 框架富文本开发要点

  1. QTextEdit使用
  2. QTextCursor接口使用
  3. QTextDocument使用

QTextEdit

QTextEdit是Qt框架推荐的用于富文本编辑的组建
支持:

  • html4语法
  • 支持富文本展示和编辑
  • 提供了程序化编辑接口

这此实例中仅仅作为接受文本和展示文本的前端,不深入展开

QTextCursor

QTextCursor是Qt框架提供的用于编程操控富文本文档的工具,利用QTextCursor在文档中移动和编辑元素

QTextDocument

是QTextEdit显示内容的模型
可以用来支持大文档,完全载入所有文档,将惰性加载的任务抛给Qt框架。

注意问题

QTextDocument中默认存在rootframe[qtextframe]

由于QTextFrame中默认存在一个QTextBlock如果程序插入的第一个元素不是QTextBlock(insertText())而是QTextFrame(insertFrame())就会造成Frame上方和下方多出冗余行,可能是qt框架原因,未有解决方案。

解决思路:使用QSyntaxHighlighter进行计算校验,将冗余行隐藏。

QTextEdit文章节点跳转

QTextEdit跳转采用设置QTextCursor位置的方式
QTextCursor.setPosition(),跳转的位置通过QTextFrame.firstPosition()取得。
为了滑动标题到顶部,需要设置QTextEdit.verticalScrollBar.setValue()
QTextEdit的滚动条范围是按照TextArea的像素大小设置的(目前看来是的)。所以只需要sbar.setValue(sbar.value()+offset)。
offset用textcursor的y()就可以了。

大文档问题

QTextEdit采用的整体计算方式,渲染大文档卡顿,还是放弃了。

UndoRedoStacks问题

当使用QTextCursor接口通过QSyntaxHighlighter为每个TextFrame和TextBlock统一刷格式的时候发现会导致撤销堆栈失效,不知道为什么。

你可能感兴趣的:(C/C++,编程经验,Qt)