QTextLine、QGlyphRun、QTextLayout

QGlyphRun

一、描述

此类提供对字体中内部字形的直接访问。在某些情况下,开发人员可以对特定字体中的字形绘制到屏幕上进行更低级的控制。

当Qt显示以Unicode编码的文本字符串时,它会将Unicode点转换为基于字体的字形索引列表和位置列表。QGlyphRun 提供了一个接口,用于获取屏幕上的文本所需的原始数据。它包含字形索引列表、每个字形的位置和字体。

QTextLayout::glyphRuns()、QTextFragment::glglyphRun() 可用于将unicode编码的文本转换为QGlyphRun 对象列表,QPainter::drawGlyphRun() 可用来绘制glyph。

二、类型成员

1、enum QGlyphRun::GlyphRunFlag:此枚举的标志可以改变字形运行在视觉布局中的呈现方式或行为。

  • Overline:字形显示上划线。
  • Underline:字形显示下划线。
  • StrikeOut:字形显示删除线。
  • RightToLeft:字形从右到左排序。
  • SplitLigure:字形拆分连字标志符号

三、成员函数

略。


QTextLine

一、描述

此类表示 QTextLayout 中的一行文本。此类对象通常由 QTextLayout::createLine()创建。

二、部分成员函数

1、qreal ascent()

     qreal descent()

     qreal height()

     qreal width()

     qreal x()

     qreal y()

     qreal leading()

如下图。

     QRectF rect()

文本的边界矩形。

    void setLeadingIncluded(bool included)

设置 height 是否包括 leading,默认为 false。leading 为负则被忽略。 

     qreal cursorToX(int *cursorPos, QTextLine::Edge edge = Leading)

     qreal cursorToX(int cursorPos, QTextLine::Edge edge = Leading)

将位置 cursorPos 转换为文本行范围内相应的x轴位置,但不会超出文本边界矩形。

     int xToCursor(qreal pos, QTextLine::CursorPosition cpos = CursorBetweenCharacters)

将文本行上x坐标pos转换为最近的匹配光标位置。

2、void draw(QPainter *painter, const QPointF &position)

在 position 上使用 painter 上绘制一行文本。

3、QList<QGlyphRun> glyphRuns(int from = -1, int length = -1)

返回由 from 和 length 定义的范围内的字符的所有字形索引和位置。

from 索引相对于包含 QTextLayout 的文本的开头,范围必须在函数 textStart() 和 textLength() 确定的 QTextLine 范围内。

如果 from 为负,则默认为 textStart(),如果 length 为负,则默认为 textLength()。

4、qreal horizontalAdvance()

返回一个水平距离:从其位置到下一个自然绘制文本的位置的距离。

可以使用它并排放置两行文本:将第二行文本的位置设置为第一行文本的此值。

5、bool isValid()

是否有效。

6、int lineNumber()

当前行在文本引擎中的位置,是第几行。

7、QRectF naturalTextRect()

返回行内文本所覆盖的矩形。与 rect() 相比,返回的是文本实际占用的矩形。

8、qreal naturalTextWidth()

返回文本所占行的宽度。与 width() 的关系与上面类似。

9、void setLineWidth(qreal width)

设置文本行的宽度。该行从其起始位置开始填充尽可能多的字符。

10、void setNumColumns(int numColumns)

设置文本行从其起始位置开始填充的字符数。如果文本不能拆分到 numColumns 个字符,则该行将被填充到下一个空格或文本末尾。

例如:设置40可足够填充2字符:

再设置每个文本行只填充1字符:

11、void setPosition(const QPointF &pos)

文本开始的位置。

12、int textLength()

文本行中字符个数。

13、int textStart()

当前文本行的开头的字符是 QTextLayout 字符串的第几个字符。


QTextLayout

一、描述

QTextLayout类用于布置和渲染文本,可用于纯文本和富文本。它提供了Unicode兼容的渲染、换行和光标定位处理等功能。

二、部分成员函数

1、void beginLayout() / void endLayout()

开始布局过程。

2、QRectF boundingRect()

包含布局中所有文本行的最小矩形。

3、void clearLayout()

清除布局中的文本行信息。这将使布局无效。

4、QTextLine createLine()

如果布局中有要插入的文本,则返回要布局的新文本行,否则返回无效的文本行。

5、void draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF())

在pos指定的位置绘制整个布局。渲染的布局被剪裁在 clip 指定的矩形内。

6、void drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width)

     void drawCursor(QPainter *painter, const QPointF &position, int cursorPosition)

在给定位置绘制文本光标。文本中的相应位置由 cursorPosition 指定。

7、QList<QGlyphRun> glyphRuns(int from = -1, int length = -1)

返回与此文本布局中从位置 from 开始的 length 个字符相对应的所有字形的字形索引和位置。

这是一个昂贵的函数,不应在时间敏感的上下文中调用。

如果 from 小于零,则将从布局中的第一个字符开始。如果 length 小于零,则将从开始位置开始跨越整个字符串。

8、bool isValidCursorPosition(int pos)

位置pos是否有效的光标位置。在Unicode上下文中,文本中的某些位置不是有效的光标位置。

9、QTextLine lineAt(int i)

文本布局中的第 i 个文本行。

10、int lineCount()

此文本布局中的文本行数。

11、QTextLine lineForTextPosition(int pos)

返回包含光标位置 pos 的文本行。

12、qreal maximumWidth()

布局可以扩展到的最大宽度,基本上是整个文本的宽度。此函数仅在完成布局后返回有效值。

      qreal minimumWidth()

布局所需的最小宽度。这是布局的最小不可分割子字符串的宽度。此函数仅在完成布局后返回有效值。

13、int preeditAreaPosition()

返回编辑前即将处理的文本布局中区域的位置。

      QString preeditAreaText()

返回编辑前插入到布局中的文本。

14、void setCacheEnabled(bool enable)

是否启用完整布局信息的缓存。QTextLayout 默认在调用 endLayou() 后会丢弃大部分布局信息,以减少内存消耗。但是,如果想在之后直接绘制布局文本,启用缓存可能会大大加快绘制速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值