QStaticText Class
QStaticText 类可在文本及其布局很少更新时优化文本绘制。更多
Header: | #include <QStaticText> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 所有成员(包括继承成员)的列表
- QStaticText 属于隐式共享类。
公共类型
enum | PerformanceHint { ModerateCaching, AggressiveCaching } |
公共函数
QStaticText() | |
QStaticText(const QString &text) | |
QStaticText(const QStaticText &other) | |
~QStaticText() | |
QStaticText::PerformanceHint | performanceHint() const |
void | prepare(const QTransform &matrix = QTransform(), const QFont &font = QFont()) |
void | setPerformanceHint(QStaticText::PerformanceHint performanceHint) |
void | setText(const QString &text) |
void | setTextFormat(Qt::TextFormat textFormat) |
void | setTextOption(const QTextOption &textOption) |
void | setTextWidth(qreal textWidth) |
QSizeF | size() const |
void | swap(QStaticText &other) |
QString | text() const |
Qt::TextFormat | textFormat() const |
QTextOption | textOption() const |
qreal | textWidth() const |
bool | operator!=(const QStaticText &other) const |
QStaticText & | operator=(const QStaticText &other) |
bool | operator==(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 支持的 HTML 子集对文本进行格式化。QStaticText 将尝试使用Qt::mightBeRichText() 猜测输入文本的格式,如果该函数返回true
,则将其解释为富文本。要强制 QStaticText 以纯文本或富文本显示其内容,请使用函数QStaticText::setTextFormat() 并分别传入Qt::PlainText 和Qt::RichText 。
QStaticText 只能表示文本,因此只有改变文本布局或外观的 HTML 标记才会受到尊重。例如,如果在输入的 HTML 中添加图片,图片将作为布局的一部分,影响文本字形的位置,但不会显示出来。输出结果将是一个与图片大小相当的空白区域。同样,使用表格会导致文本以表格格式布局,但不会绘制边框。
如果是第一次绘制静态文本,或者静态文本或绘制者的字体自上次绘制后发生了更改,则必须重新计算文本的布局。在某些绘制引擎中,更改绘制器的矩阵也会导致布局重新计算。除 OpenGL2 绘画引擎外,其他引擎都会出现这种情况。重新计算布局会给QPainter::drawStaticText() 调用带来开销。为避免在绘制事件中出现这种开销,可以提前调用prepare() 以确保布局已计算完毕。
另请参阅 QPainter::drawText(),QPainter::drawStaticText(),QTextLayout, 和QTextDocument 。
成员类型文档
enum QStaticText::PerformanceHint
该枚举说明了可在QStaticText 上设置的不同性能提示。这些提示可用于指示QStaticText 应尽可能使用额外缓存,以牺牲内存来提高性能。特别是,在QStaticText 上设置性能提示 AggressiveCaching,将在使用 OpenGL 图形系统或绘制到QOpenGLWidget 时提高性能。
常量 | 值 | 说明 |
---|---|---|
QStaticText::ModerateCaching | 0 | 进行基本缓存,以较低的内存成本获得高性能。 |
QStaticText::AggressiveCaching | 1 | 在可用时使用附加缓存。这可能会以较高的内存成本提高性能。 |
成员函数文档
QStaticText::QStaticText()
构造一个空的 QStaticText
[explicit]
QStaticText::QStaticText(const QString &text)
使用给定的text 构建 QStaticText 对象。
QStaticText::QStaticText(const QStaticText &other)
构造一个 QStaticText 对象,它是other 的副本。
[noexcept]
QStaticText::~QStaticText()
摧毁QStaticText.
QStaticText::PerformanceHint QStaticText::performanceHint() const
返回为QStaticText 设置的性能提示。
另请参见 setPerformanceHint().
void QStaticText::prepare(const QTransform &matrix = QTransform(), const QFont &font = QFont())
为使用给定的matrix 和font 绘制QStaticText 对象做准备,以避免实际调用 drawStaticText() 时的开销。
调用 drawStaticText() 时,如果QStaticText 对象的任何部分自上次绘制后发生变化,则将重新计算QStaticText 的布局。如果绘制者的字体与上次绘制QStaticText 时的字体不同,或者在 OpenGL2 引擎以外的其他绘制引擎上,绘制者的矩阵自上次绘制静态文本后发生了更改,也会重新计算布局。
为了避免在更改后首次绘制QStaticText 时创建布局的开销,可以使用 prepare() 函数并传入绘制文本时预计使用的matrix 和font 。
另请参阅 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 标记。
注意: 此功能将导致文本布局需要重新计算。
另请参阅 textFormat()、setText() 和text()。
void QStaticText::setTextOption(const QTextOption &textOption)
将控制排版过程的文本选项结构设置为给定的textOption 。
另请参阅 textOption() 。
void QStaticText::setTextWidth(qreal textWidth)
设置QStaticText 的首选宽度。如果文本宽度大于指定宽度,则文本将分成多行并垂直增长。如果文本无法分割成多行,则会大于指定的textWidth 。
将首选文本宽度设置为负数将导致文本无边界。
使用size() 可以获得文本的实际大小。
注意: 此函数将导致文本布局需要重新计算。
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
。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.