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統一刷格式的時候發現會導致撤銷堆棧失效,不知道爲什麼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章