一、问题背景
QFontMetrics类可计算字符串的宽度和高度,但它只适用于字符串单行显示的情形,对于多行显示的字符串,就显得力不从心了。
QTextLayout很好的支持字符串换行的情景,当然了,它还集成了QPainter,能有效地处理渲染的问题。
【注】测试Demo程序在第五节
二、定义:
QTextLayout 是 Qt 中一个核心且强大的底层类,用于处理单段文本的布局、换行和渲染。它位于文本处理栈的较低层(在 QTextDocument 和 QPainter 之间),为需要精细控制文本外观或处理复杂文本特性(如双向文本、复杂脚本)的场景提供了基础。
三、核心功能:
-
文本存储与属性: 存储要布局的文本字符串。
-
字体与格式: 应用字体、画笔、笔刷等格式属性(通过
QTextOption或直接设置)。 -
布局计算:
-
换行: 根据给定的宽度、对齐方式和
QTextOption中的换行模式(WrapMode)自动将文本分割成多行(QTextLine)。 -
对齐: 对行内文本进行左对齐、右对齐、居中对齐或两端对齐。
-
基线对齐: 管理文本行的基线位置。
-
双向文本处理: 正确处理包含从左向右(LTR)和从右向左(RTL)文本混合的段落(例如:阿拉伯语、希伯来语与英语混合)。
-
制表符处理: 根据
QTextOption中设置的制表位位置或默认行为处理制表符 (\t)。 -
边界计算: 计算文本段落的自然大小(未换行时)、布局后的矩形边界、每一行的位置和尺寸。
-
-
字形访问: 提供访问布局后产生的实际字形(
glyphRun())及其位置信息的能力,这对于自定义渲染(如文本路径效果、文本选择高亮、文本分析)至关重要。 -
缓存: 布局计算相对昂贵。
QTextLayout可以缓存布局结果,当文本或宽度未改变时,后续绘制可以复用缓存,提高性能。 -
与
QPainter集成: 提供draw()方法直接将布局好的文本绘制到QPainter设备上。
四、主要组件和概念:
-
QTextOption:-
封装了影响段落布局的选项。
-
关键属性:
-
alignment:文本对齐方式 (Qt::AlignLeft,Qt::AlignRight,Qt::AlignCenter,Qt::AlignJustify)。 -
wrapMode:换行模式 (QTextOption::NoWrap,QTextOption::WordWrap,QTextOption::WrapAnywhere,QTextOption::WrapAtWordBoundaryOrAnywhere)。 -
tabs:制表位列表 (QList<QTextOption::Tab>),定义制表符\t的对齐位置和类型。 -
flags:其他标志,如IncludeTrailingSpaces(影响两端对齐时是否考虑行尾空格)。 -
textDirection:段落的默认书写方向(Qt::LeftToRight,Qt::RightToLeft),通常由文本内容自动确定。
-
-

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



