このページでは

QStaticText Class

QStaticText クラスは、テキストとそのレイアウトの更新頻度が低い場合に、テキストの描画を最適化します。詳細...

ヘッダー: #include <QStaticText>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

パブリック型

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 オブジェクトを作成してください。そうすれば、テキストは 1 行に収まります。

QStaticText オブジェクトにテキスト幅を設定すると、テキストはそれに制限されます。 テキストは、どの行も指定された幅を超えないようにフォーマットされます。QStaticText に設定されたテキスト幅は、クリッピングに自動的に使用されるわけではありません。改行に加えてクリッピングを行うには、QPainter::setClipRect() を使用してください。テキストの位置は、QPainter::drawStaticText() に渡される引数によって決定され、パフォーマンスへの影響を最小限に抑えながら、呼び出しごとに変更することができます。

さらに利便性を高めるため、QTextDocument がサポートするHTMLサブセットを使用してテキストに書式設定を適用することができます。QStaticTextはQt::mightBeRichText()を使用して入力テキストの書式を推測し、この関数がtrue を返した場合、それをリッチテキストとして解釈します。 QStaticTextに内容をプレーンテキストまたはリッチテキストとして表示させるには、関数QStaticText::setTextFormat()を使用し、それぞれQt::PlainText およびQt::RichText を引数として渡します。

QStaticText はテキストのみを表現できるため、テキストのレイアウトや外観を変更する HTML タグのみが反映されます。たとえば、入力 HTML に画像を追加すると、その画像はレイアウトの一部として組み込まれ、テキストのグリフの位置に影響を与えますが、表示されることはありません。 その結果、出力には画像と同じサイズの空白領域が表示されます。同様に、表(table)を使用すると、テキストは表形式で配置されますが、境界線は描画されません。

静的テキストが初めて描画される場合、あるいは前回の描画以降に静的テキストやペインターのフォントが変更された場合、テキストのレイアウトを再計算する必要があります。一部のペイントエンジンでは、ペインターのマトリックスを変更した場合にもレイアウトが再計算されます。 特に、OpenGL2ペイントエンジンを除くすべてのエンジンでこれが発生します。レイアウトの再計算は、それが行われるQPainter::drawStaticText()呼び出しにオーバーヘッドをもたらします。ペイントイベントでのこのオーバーヘッドを回避するには、事前にprepare()を呼び出して、レイアウトが確実に計算されるようにすることができます。

QPainter::drawText()、QPainter::drawStaticText()、QTextLayout 、およびQTextDocumentも参照してください 。

メンバ型のドキュメント

enum QStaticText::PerformanceHint

この列挙型は、QStaticText に設定可能なさまざまなパフォーマンスヒントを列挙したものです。これらのヒントを使用すると、QStaticText に対し、可能であれば追加のキャッシュを使用して、メモリを犠牲にしてでもパフォーマンスを向上させるよう指示することができます。特に、QStaticText にパフォーマンスヒント「AggressiveCaching」を設定すると、OpenGLグラフィックスシステムを使用する場合や、QOpenGLWidget に描画する場合のパフォーマンスが向上します。

定数値説明
QStaticText::ModerateCaching0メモリ消費を抑えつつ、高いパフォーマンスを得るために基本的なキャッシュ処理を行います。
QStaticText::AggressiveCaching1利用可能な場合は、追加のキャッシュを使用します。これにより、メモリ消費量は増えますが、パフォーマンスが向上する可能性があります。

メンバ関数のドキュメント

QStaticText::QStaticText()

空の QStaticText を生成します

[explicit] QStaticText::QStaticText(const QString &text)

指定された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())

指定された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 として解釈されます。テキストのフォント、色、またはレイアウトを変更する HTML タグは、QStaticText によってサポートされています。

注:この関数を呼び出すと 、テキストのレイアウトの再計算が必要になります。

関連項目: textFormat()、setText()、およびtext()。

void QStaticText::setTextOption(const QTextOption &textOption)

レイアウト処理を制御するテキストオプションの構造を、指定されたtextOption に設定します。

textOption()も参照してください 。

void QStaticText::setTextWidth(qreal textWidth)

このQStaticText の推奨幅を設定します。テキストが指定された幅より広い場合、複数行に分割され、縦方向に伸びます。テキストを複数行に分割できない場合、指定されたtextWidth よりも大きくなります。

推奨テキスト幅に負の数値を設定すると、テキストに幅の制限がなくなります。

テキストの実際のサイズを取得するには、size() を使用してください。

注:この 関数を使用すると、テキストのレイアウトの再計算が必要になります。

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 を返します。

© 2026 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.