QStaticText 类

QStaticText 类允许在文本和其布局很少更新时优化文本绘制。 更多...

头文件 #include <QStaticText>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

枚举PerformanceHint { ModerateCaching, AggressiveCaching }

公共函数

QStaticText()
QStaticText(const QString &text)
QStaticText(const QStaticText &other)
~QStaticText()
QStaticText::PerformanceHintperformanceHint() const
voidprepare(const QTransform &matrix = QTransform(), const QFont &font = QFont())
voidsetPerformanceHint(QStaticText::PerformanceHint performanceHint)
voidsetText(const QString &text)
voidsetTextFormat(Qt::TextFormat textFormat)
voidsetTextOption(const QTextOption &textOption)
voidsetTextWidth(qreal textWidth)
QSizeFsize() const
voidswap(QStaticText &other)
QStringtext() const
Qt::TextFormattextFormat() const
QTextOptiontextOption() const
qrealtextWidth() const
booloperator!=(const QStaticText &other) const
QStaticText &operator=(const QStaticText &other)
booloperator==(const QStaticText &other) const

详细描述

QStaticText 提供了一种缓存文本块布局数据的方法,使其可以比使用 QPainter::drawText()(在每次调用时都会重新计算布局信息)更有效地绘制。

该类主要用于改进文本、字体和画家变换在多个绘制事件中都是静态的情况。如果文本或其布局在每次迭代中都会改变,则 QPainter::drawText() 是更有效的选择,因为静态文本的布局需要重新计算以考虑新的状态。

翻译画家不会导致文本布局重新计算,但会在drawStaticText()上造成非常小的性能影响。改变画家的任何其他部分或画家的字体将导致静态文本的布局重新计算。这应该尽量避免,以最大限度地提高使用QStaticText的性能优势。

此外,drawStaticText()只支持仿射变换。在投影画家上调用drawStaticText()会比使用常规的drawText()调用稍慢,因此应该避免这样做。

class MyWidget: public QWidget
{
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent), m_staticText("This is static text")

protected:
    void paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
        painter.drawStaticText(0, 0, m_staticText);
    }

private:
    QStaticText m_staticText;
};

QStaticText类可以用来模拟QPainter::drawText()在无边界特定点的行为,以及其他情况下调用QPainter::drawText()时的情况。

如果不需要边界矩形,则创建一个没有设置首选文本宽度的QStaticText对象。文本将占用单行。

如果为QStaticText对象设置了文本宽度,这将限制文本。文本将被格式化,以保证任何一行都不超过给定的宽度。设置给QStaticText的文本宽度不会自动用于裁剪。要实现裁剪以及换行,请使用QPainter::setClipRect()。文本的位置由传递给QPainter::drawStaticText()的参数决定,并且每次调用可以发生变化,但对性能的影响最小。

为了额外的便利,可以使用由QTextDocument支持的多带子集对文本进行格式设置。QStaticText将尝试使用Qt::mightBeRichText猜测输入文本的格式,并且当该函数返回true时将其解释为富文本。要强制QStaticText将其内容显示为纯文本或富文本,请使用QStaticText::setTextFormat()函数并分别传入Qt::PlainText和Qt::RichText。

QStaticText只能表示文本,因此只有那些更改文本布局或外观的HTML标签会被尊重。例如,向输入HTML中添加图片会使得图片作为布局的一部分包含,从而影响文本符号的位置,但不会显示出来。输出结果将是一个图像大小的空白区域。类似地,使用表格将导致文本以表格格式布局,但是不会绘制边框。

如果在第一次绘制静态文本时,或者自从上次绘制以来静态文本或画家的字体已经改变,则必须重新计算文本布局。在某个绘图引擎中,改变画家的矩阵也会导致重新计算布局。特别是在除OpenGL2绘图引擎外的任何引擎中都会发生这种情况。重新计算布局将对QPainter::drawStaticText()调用中的QPainter::drawStaticText()施加开销。为了避免在绘图事件中产生这种开销,您可以提前调用prepare()以确保布局被计算。

另请参阅:QPainter::drawText(), QPainter::drawStaticText(), QTextLayout, 和 QTextDocument。

成员类型文档

枚举QStaticText::PerformanceHint

本枚举定义了可以设置在QStaticText上的不同性能提示。这些提示可用于指示如果可能的话,QStaticText应使用额外的缓存以提高性能,但会牺牲内存。特别是,在QStaticText上设置性能提示AggressiveCaching可以改善在使用OpenGL图形系统或绘制到QOpenGLWidget时的性能。

常量描述
QStaticText::ModerateCaching0以低内存成本进行基本的缓存以实现高性能。
QStaticText::AggressiveCaching1当可用时使用额外的缓存。这可能以更高的内存成本提高性能。

成员函数文档

QStaticText::QStaticText()

构建一个空的QStaticText

[显式] QStaticText::QStaticText(const QString &text)

构建一个具有给定文本的QStaticText对象。

QStaticText::QStaticText(const QStaticText &other)

构建一个复制自other的QStaticText对象。

[noexcept] QStaticText::~QStaticText()

销毁QStaticText

QStaticText::PerformanceHint QStaticText::performanceHint() const

返回为QStaticText设置的哪个性能提示。

另请参阅setPerformanceHint

void QStaticText::prepare(const QTransform &matrix = QTransform(), const QFont &font = QFont())

QStaticText对象准备好绘制,使用指定的matrix和指定字体,以避免在调用的drawStaticText()时产生开销。

当调用drawStaticText()时,如果自上次绘制以来QStaticText对象的任何部分已更改,则将重新计算QStaticText的布局。如果绘制器的字体与QStaticText上次绘制时的字体不同,或在这种情况下不是OpenGL2引擎的任何其他绘制引擎,且自上次绘制静态文本以来绘制器矩阵已更改,也会重新计算。

为了避免在第一次绘制QStaticText并做出更改后创建布局的开销,您可以使用prepare()函数并传入当绘制文本时预期的matrixfont

另请参阅QPainter::setFont() 和 QPainter::setWorldTransform

void QStaticText::setPerformanceHint(QStaticText::PerformanceHint performanceHint)

根据提供的 performanceHint 设置 QStaticText 的性能提示。该 performanceHint 用于自定义内部进行多少缓存,从而提高性能。

默认值为 QStaticText::ModerateCaching

注意: 此函数将导致文本布局需要重新计算。

另请参阅 performanceHint

void QStaticText::setText(const QString &text )

设置 QStaticText 的文本为 text

注意: 此函数将导致文本布局需要重新计算。

另请参阅 text

void QStaticText::setTextFormat(Qt::TextFormat textFormat )

设置 QStaticText 的文本格式为 textFormat。如果 textFormat 设置为 Qt::AutoText (默认值),则使用函数 Qt::mightBeRichText 尝试确定文本的格式。如果文本格式为 Qt::PlainText,则文本将按原样显示;如果格式为 Qt::RichText,则文本将被解释为 HTML。QStaticText 支持改变文本字体、颜色或布局的 HTML 标签。

注意: 此函数将导致文本布局需要重新计算。

另请参阅 textFormatsetTexttext

void QStaticText::setTextOption(const QTextOption &textOption )

将控制布局过程的文本选项结构设置为给定的 textOption

另请参阅 textOption

void QStaticText::setTextWidth(qreal textWidth )

设置此 QStaticText 的首选宽度。如果文本比指定的宽度大,它将分为多行并垂直增长。如果文本不能分成多行,它将大于指定的 textWidth

将首选文本宽度设置为负数将导致文本无界。

使用 size() 获取文本的实际大小。

注意: 此函数将导致文本布局需要重新计算。

另请参阅 textWidthsize

QSizeF QStaticText::size() const

返回此 QStaticText 的边界矩形的尺寸。

另请参阅 textWidth

[noexcept] void QStaticText::swap(QStaticText &other )

other 交换此静态文本实例。此函数非常快且永远不会失败。

QString QStaticText::text() const

返回 QStaticText 的文本。

另请参阅 setText

Qt::TextFormat QStaticText::textFormat() const

返回 QStaticText 的文本格式。

另请参阅 setTextFormat(),setText() 和 text()。

QTextOption QStaticText::textOption() const

返回当前用于控制布局过程的文本选项。

另请参阅 setTextOption()。

qreal QStaticText::textWidth() const

返回此 QStaticText 的首选宽度。

另请参阅 setTextWidth()。

bool QStaticText::operator!=(const QStaticText &other) const

other 与此 QStaticText 进行比较。如果文本、字体或最大尺寸不同则返回 true

QStaticText &QStaticText::operator=(const QStaticText &other)

other 赋值给此 QStaticText

bool QStaticText::operator==(const QStaticText &other) const

other 与此 QStaticText 进行比较。如果文本、字体和文本宽度相等则返回 true

© 2024 Qt 公司。本文件包含的文档贡献者是各自所有权的版权所有者。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议(版本 1.3)许可的。Qt 以及相应的标志是芬兰的 Qt 公司及其在全球的分公司和分支机构在全球的商标。所有其他商标均为其各自所有者的财产。