QTextEdit和QTextDocument(ZZ)

本文详细介绍QTextEdit的功能特性,包括显示和编辑富文本、图片、列表和表格的能力。探讨了其性能优势,如快速响应用户操作及高效显示大型文档。此外,文章还介绍了QTextCursor和QTextDocument的使用方法,以便于开发者更好地进行文本处理。

http://blog.youkuaiyun.com/rea_1121/article/details/6432064

QTextEdit简介:

它可以显示rich text。 这里的rich text不是指microsoft的rich text,而是用html标签表示的形式。

它通过viewport显示大型文件,而且性能好,可以快速响应用户的操作。

以paragraph和character为基本单位工作。paragraph是格式化的字符串,自动word-wrap以适应容器的大小。一个document由paragraph组成。paragraph可以有自己的alignment属性,paragragh之间由hard line break截断。每个character有自己的字体和颜色等属性。

QTextEdit可以显示图像,列表和表格。必要时会有滚动条以浏览全文。text edit可以显示plain text和html文件。QtWebKit是比较完整的浏览器控件。QLabel也可以显示小段的rich text.

方法:
I. 显示文本:

setHtml(), toHtml(), clear()用来控制内容到html的转换,还有清除内容。

插入内容:insertHtml(), insertPlainText(), append(), paste(). 类QTextCursor可以用来插入table,list,text,还用来创建selection和修改selection

word wrap: 默认的方式是在空白字符处wrap。 setLineWrapMode() 可以指定wrap的模式,像素,几列,从来不wrap,随便wrap.

查找:find()方法用来查找和选定text内的制定字符串。

可以设置QTextDocument的maximumBlockCount属性来控制文档最多显示的段落数。

II.编辑文本:

设置当前character的属性:setFontItalic (), setFontWeight (), setFontUnderline (), setFontFamily (),setFontPointSize (), setTextColor () and setCurrentFont ().

设置当前paragraph的属性:

得到类QTextCursor来操控selection: textCursor(),返回当前可见的cursor; 创建一个QTextCursor对象setTexctCursor()。 copy和cut方法会把当前选中的文本放到剪贴板中。currentCharFormatChanged()是个信号,cursor移动而且字符格式改变时会被调用。

得到类QTextDocument来操控:document()。setDocument()可以用来设置document. 当document改变时会有textChanged()信号。 isModified方法可以来检查document是否改变。它也有undo() redo()方法。

还有一部分context menu的方法。

QTextDocument简介:

存放结构化的rich text文件,每个元素都有对应的格式对象。可以通过objectForFormat()来通过格式对象查找元素。

可以通过QTextCursor来编程编辑QTextDocument对象。通过rootFrame()方法得到根节点再遍历其中的元素。如果只是浏览其中的文本文档,就用begin(),end(),findBlock()方法。

文本的格式由documentLayout()决定.metaInformation()来的到文件的元信息。

toPlainText()和toHtml()方法能够得到它text形式的内容和html形式的内容。

QTextCursor简介:

QTextCursor是专门用来协助处理和获取QTextDocument内容的一组api. 它包含的信息既有QTextDocument内的光标位置(position()),以及所做的selection(anchor() 和 position()之间)。current character是指position之前的那个character. current block是指包含position()位置的block.

方法:

setPosition(), movePosition() 可以用来创建selection。取得selection的内容:selectionStart (), selectionEnd (),hasSelection (), clearSelection (), andremoveSelectedText ().

取得format信息:charFormat (), blockFormat ().

设置format信息:setCharFormat (),mergeCharFormat (),setBlockFormat () andmergeBlockFormat (). merge会把本来的格式合并。当当前有selection时,char format会对应到所选中的内容上;即使block没有全选,block format会应用于整个block.

删除文本:deleteChar (), deletePreviousChar (), andremoveSelectedText ().

插入文本:insertText () function, insertBlock (). insertList (),insertTable (),insertImage (),insertFrame ()

action可以分组(被undo/redo当作一个操作):beginEditBlock () and endEditBlock ().

<think>我们正在讨论Qt框架中的QTextEditQPlainTextEdit两个控件的区别。根据提供的引用,我们可以总结如下:1.**QPlainTextEdit**:-主要用于纯文本的显示编辑。-在处理大量文本时性能更高,尤其是在需要滚动条滚动查看大量文本时。-不支持富文本(如HTML、样式等),只处理纯文本。-适合作为日志显示、代码编辑器等需要高性能纯文本处理的场景。2.**QTextEdit**:-支持富文本(包括HTML、文本样式、颜色、图片、表格等)。-功能更全面,是一个全功能的文本编辑器。-在处理大量文本时性能可能不如QPlainTextEdit,因为它需要处理复杂的格式。-适合需要编辑显示格式化文本的场景,如富文本编辑器。引用[1]提到:QPlainTextEdit可以理解为QTextEdit的低配版,它只支持纯文本,而QTextEdit支持富文本。并且QPlainTextEdit在显示大量文字时效率更高。引用[2]指出:QPlainTextEdit多用于需要与文本进行处理的地方,而QTextEdit多用于显示。QPlainTextEdit对纯文本的处理能力更强。引用[3]详细说明了QTextEdit的特性:支持富文本格式,提供了丰富的文本编辑功能,但处理大量文本时可能较慢。 因此,选择哪一个控件取决于应用场景: -如果需要编辑显示纯文本(例如日志、代码编辑器),并且对性能要求较高,应选择QPlainTextEdit。-如果需要编辑显示富文本(例如带有格式的文本、HTML等),则选择QTextEdit。 下面是一个简单的对比表格: |特性|QPlainTextEdit|QTextEdit| |--------------|------------------------|-------------------------| |文本类型|纯文本|富文本(支持HTML等)| |性能|高(尤其大量文本)|相对较低(处理格式复杂)| |适用场景|日志、代码编辑器等|富文本编辑器、邮件等| |功能|基础文本编辑|丰富的文本格式功能| §§相关问题§§1.在Qt中,如何设置QPlainTextEdit为只读模式? 2. QTextEdit支持哪些富文本格式? 3.如何优化QTextEdit在显示大量文本时的性能? 4.在Qt中,如何将HTML内容显示在QTextEdit中? 5. QPlainTextEditQTextEdit在信号槽的使用上有何不同?</think>### Qt框架中QTextEdit与QPlainTextEdit的区别 在Qt框架中,`QTextEdit``QPlainTextEdit`都是用于文本处理的控件,但它们在功能定位性能特性上有显著差异: #### 1. **核心功能差异** - **QTextEdit** 支持完整的富文本(Rich Text)处理能力,包括: - HTML格式解析与渲染 - 文本样式(粗体/斜体/下划线) - 颜色、字体、段落对齐 - 表格、图片嵌入、超链接 - 撤销/重做操作栈 *适用场景:富文本编辑器、邮件客户端、带格式的文档显示*[^3]。 - **QPlainTextEdit** 专注于纯文本(Plain Text)处理: - 仅支持无格式文本(ASCII/Unicode) - 无HTML解析能力 - 提供基础文本编辑功能(复制/粘贴/查找) *适用场景:代码编辑器、日志查看器、终端模拟器*[^1][^2]。 #### 2. **性能对比** | 指标 | QTextEdit | QPlainTextEdit | |---------------------|-------------------------------|-------------------------------| | **内存占用** | 较高(需存储格式信息) | 较低 | | **滚动性能** | 处理大量文本时可能卡顿 | 优化更好,流畅滚动[^1] | | **加载速度** | 较慢(需解析格式) | 极快(直接处理文本流) | #### 3. **典型使用场景** - **优先选择QTextEdit** ```cpp // 富文本示例:插入带样式的HTML QTextEdit *richText = new QTextEdit; richText->setHtml("<b>标题</b><br><i>正文内容</i>"); ``` 需要渲染复杂格式(如报告生成器、带样式文本)。 - **优先选择QPlainTextEdit** ```cpp // 纯文本示例:高效加载日志 QPlainTextEdit *logViewer = new QPlainTextEdit; logViewer->setPlainText(readLargeLogFile()); ``` 处理>10,000行的文本或实时数据流[^2]。 #### 4. **扩展能力差异** - **QTextEdit** 可通过`document()`访问`QTextDocument`对象,实现: - 复杂文档布局 - 自定义文本格式器 - 打印预览支持 - **QPlainTextEdit** 提供`block`(文本块)级操作: ```cpp // 获取第5行文本 QTextBlock block = plainTextEdit->document()->findBlockByNumber(4); QString lineText = block.text(); ``` 适合逐行处理的场景(如编译器错误定位)。 > **关键结论**: > 若需富文本支持(HTML/样式/表格)选`QTextEdit`; > 若需高性能纯文本处理(日志/代码)选`QPlainTextEdit`[^1][^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值