このページでは

QGlyphRun Class

QGlyphRun クラスは、フォント内の内部グリフへの直接アクセスを提供します。詳細...

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

パブリック型

enum GlyphRunFlag { Overline, Underline, StrikeOut, RightToLeft, SplitLigature }
flags GlyphRunFlags

パブリック関数

QGlyphRun()
QGlyphRun(const QGlyphRun &other)
~QGlyphRun()
QRectF boundingRect() const
void clear()
QGlyphRun::GlyphRunFlags flags() const
QList<quint32> glyphIndexes() const
bool isEmpty() const
bool isRightToLeft() const
bool overline() const
QList<QPointF> positions() const
QRawFont rawFont() const
void setBoundingRect(const QRectF &boundingRect)
void setFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true)
void setFlags(QGlyphRun::GlyphRunFlags flags)
void setGlyphIndexes(const QList<quint32> &glyphIndexes)
void setOverline(bool overline)
void setPositions(const QList<QPointF> &positions)
void setRawData(const quint32 *glyphIndexArray, const QPointF *glyphPositionArray, int size)
void setRawFont(const QRawFont &rawFont)
void setRightToLeft(bool rightToLeft)
(since 6.5) void setSourceString(const QString &sourceString)
void setStrikeOut(bool strikeOut)
(since 6.5) void setStringIndexes(const QList<qsizetype> &stringIndexes)
void setUnderline(bool underline)
(since 6.5) QString sourceString() const
bool strikeOut() const
(since 6.5) QList<qsizetype> stringIndexes() const
void swap(QGlyphRun &other)
bool underline() const
bool operator!=(const QGlyphRun &other) const
QGlyphRun &operator=(const QGlyphRun &other)
bool operator==(const QGlyphRun &other) const

詳細な説明

Qt が Unicode でエンコードされたテキスト文字列を表示する場合、まず、1 つ以上のフォントに基づいて、Unicode ポイントをグリフインデックスのリストと位置のリストに変換します。 この場合、テキストの Unicode 表現と `QFont ` オブジェクトは、画面上にテキストを表示する際に実際に何が起こっているかの詳細を隠蔽する、便利な抽象化として機能します。 たとえば、テキストが実際に画面に表示される時点で、ユーザーが指定したフォントに加えて、別のフォントのセットによって表現される場合があります。これは、当初選択したフォントが、テキストに含まれるすべての文字体系に対応していなかった場合などです。

状況によっては、アプリケーション開発者として、特定のフォントのどのグリフを画面に描画するかを、より低レベルで制御できると便利な場合があります。 これは、たとえば、Qt と併せて外部フォントエンジンやテキストシェイパーを使用するアプリケーションの場合などが該当します。QGlyphRun は、テキストを画面に表示するために必要な生データへのインターフェースを提供します。これには、グリフインデックスのリスト、各グリフの位置、およびフォントが含まれます。

選択したフォントに、指定されたグリフインデックスが実際に含まれていることを確認するのは、ユーザーの責任です。

QTextLayout::glyphRuns() またはQTextFragment::glyphRuns() を使用して、Unicode エンコードされたテキストを QGlyphRun オブジェクトのリストに変換し、QPainter::drawGlyphRun() を使用してグリフを描画することができます。

注: QRawFont は、それが構築されたスレッドにローカルであるとみなされることに注意してください 。つまり、QGlyphRun が別のスレッドに移動された場合、新しいQRawFont を作成し、QGlyphRun に設定する必要があります。 QGlyphRun が、現在のスレッドとは異なるスレッドのQRawFont への参照を含んでいる場合、QPainter を使用してグリフを描画することはできません。これは、この場合、QRawFont が無効であり、アクセスできないとみなされるためです。

メンバ型のドキュメント

enum QGlyphRun::GlyphRunFlag
flags QGlyphRun::GlyphRunFlags

この列挙型は、視覚的なレイアウトにおいて、グリフの連続の表示方法や動作を変更するフラグを表します。グリフの連続を生成するレイアウトは、レイアウトのユーザーが意図した通りにテキストを表示するために必要な情報を保持するため、関連する内部データに基づいてこれらのフラグを設定することができます。

定数値説明
QGlyphRun::Overline0x01グリフをオーバーラインとともに表示することを示します。
QGlyphRun::Underline0x02グリフをアンダーラインとともに表示することを示します。
QGlyphRun::StrikeOut0x04グリフを視覚的に取り消し線付きで表示することを示します。
QGlyphRun::RightToLeft0x08グリフの順序が右から左であることを示します。これは、インラインテキストオブジェクトなど、グリフランに対して相対的な位置にある他の画面要素の位置に影響を与える可能性があります。
QGlyphRun::SplitLigature0x10グリフランが合字グリフを分割していることを示します。これは、合字グリフがランに含まれているが、それによって表される文字はその合字の一部にのみ対応していることを意味します。 この場合、グリフランの `boundingRect()` 関数を使用して、そのグリフランによって表される文字に対応するグリフがカバーする領域を取得できます。 グリフを可視化する際は、リガチャーの対応する部分のみが描画されるように、この境界矩形に合わせてクリッピングを行うよう注意する必要があります。特に、特定の文字範囲のQTextLayout からグリフランを取得する場合、例えばQTextLayout の選択領域を取得する場合などに、この状況が発生する可能性があります。

GlyphRunFlags 型は、QFlags<GlyphRunFlag> の typedef です。これは、GlyphRunFlag 値の論理和(OR)の組み合わせを格納します。

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

QGlyphRun::QGlyphRun()

空の QGlyphRun オブジェクトを作成します。

QGlyphRun::QGlyphRun(const QGlyphRun &other)

other のコピーであるQGlyphRunオブジェクトを作成します。

[noexcept] QGlyphRun::~QGlyphRun()

QGlyphRun を破棄します。

QRectF QGlyphRun::boundingRect() const

このQGlyphRun に含まれるすべてのグリフを囲む最小の矩形を返します。setBoundingRect() を使用して境界矩形が設定されている場合は、その境界矩形が返されます。そうでない場合は、グリフラン内のグリフのフォントメトリクスに基づいて境界矩形が計算されます。

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

void QGlyphRun::clear()

QGlyphRun オブジェクト内のすべてのデータを消去します。

QGlyphRun::GlyphRunFlags QGlyphRun::flags() const

このQGlyphRun に対して設定されているフラグを返します。

setFlags() およびsetFlag()も参照してください 。

QList<quint32> QGlyphRun::glyphIndexes() const

この `QGlyphRun ` オブジェクトのグリフインデックスを返します。

setGlyphIndexes() およびsetPositions()も参照してください 。

bool QGlyphRun::isEmpty() const

QGlyphRun にグリフが含まれていない場合、true を返します。

bool QGlyphRun::isRightToLeft() const

この `QGlyphRun ` に、右から左へ描画されるグリフが含まれている場合、true を返します。

setRightToLeft() およびflags()も参照してください 。

bool QGlyphRun::overline() const

このQGlyphRun に上線装飾を適用すべきかどうかを判定し、true を返します。

setOverline() およびflags()も参照してください 。

QList<QPointF> QGlyphRun::positions() const

このグリフインデックスセットに含まれる各グリフについて、ベースラインの端の位置を返します。

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

QRawFont QGlyphRun::rawFont() const

このQGlyphRun オブジェクトで選択されているフォントを返します。

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

void QGlyphRun::setBoundingRect(const QRectF &boundingRect)

このQGlyphRun 内のグリフの境界矩形をboundingRect に設定します。この矩形は、boundingRect()によって返されます。ただし、この値がnullの場合は、代わりにグリフ・ラン内のグリフの境界矩形が返されます。

注: テキストシェーピングを実装している場合を除き 、この関数を使用する必要はありません。この関数は、QGlyphRun が、その中に含まれるグリフの領域よりも小さい領域を表すべき場合にのみ使用されます。 これは、例えば、QTextLayout::glyphRuns() を呼び出してグリフランを取得し、指定された範囲が合字(2 つ以上の文字が 1 つのグリフに結合されたもの)の一部のみを含んでいる場合に発生する可能性があります。 このような場合、バウンディング矩形には、リガチュアを構成する文字の平均幅の計算に基づいて、リガチュア・グリフの適切な部分のみを含める必要があります。

このようなケース(例:本文の色とは異なる色で描画されるべき選択範囲など)に対応するためには、リガチュア・グリフ全体が描画されないように、boundingRect() から返される矩形に描画メカニズムをクリップする必要があります。

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

void QGlyphRun::setFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true)

enabled が true の場合、flag は有効になります。そうでない場合は無効になります。

flags() およびsetFlags()も参照してください 。

void QGlyphRun::setFlags(QGlyphRun::GlyphRunFlags flags)

このQGlyphRun のフラグをflags に設定します。

setFlag() およびflags()も参照してください 。

void QGlyphRun::setGlyphIndexes(const QList<quint32> &glyphIndexes)

このQGlyphRun オブジェクトのグリフインデックスをglyphIndexes に設定します。グリフインデックスは、選択されたフォントに対して有効なものでなければなりません。

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

void QGlyphRun::setOverline(bool overline)

overline が真の場合、このQGlyphRun には上線装飾を付けて描画すべきであることを示します。そうでない場合、QGlyphRun には上線装飾を付けずに描画すべきです。

overline()、setFlag()、およびsetFlags()も参照してください 。

void QGlyphRun::setPositions(const QList<QPointF> &positions)

このグリフインデックスセットに含まれる各グリフのベースラインの端の位置を、positions に設定します。

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

void QGlyphRun::setRawData(const quint32 *glyphIndexArray, const QPointF *glyphPositionArray, int size)

このQGlyphRun のグリフインデックスと位置を、配列glyphIndexArray およびglyphPositionArray の最初のsize 個の要素を使用するように設定します。データはコピーされません。呼び出し元は、このQGlyphRun およびそのコピーが存在する限り、これらの配列が削除されないことを保証しなければなりません。

setGlyphIndexes() およびsetPositions()も参照してください 。

void QGlyphRun::setRawFont(const QRawFont &rawFont)

グリフインデックスの検索に使用するフォントを、指定された「rawFont 」に設定します。

rawFont() およびsetGlyphIndexes()も参照してください 。

void QGlyphRun::setRightToLeft(bool rightToLeft)

このQGlyphRun には、rightToLeft がtrueの場合、右から左の順序で並べるべきグリフが含まれていることを示します。それ以外の場合は、グリフの順序は左から右であるとみなされます。

isRightToLeft()、setFlag()、およびsetFlags()も参照してください 。

[since 6.5] void QGlyphRun::setSourceString(const QString &sourceString)

グリフランに対応する文字列をsourceString に設定します。これが設定されている場合、stringIndexes()が返すインデックスは、この文字列内のインデックスである必要があります。

この関数は Qt 6.5 で導入されました。

sourceString() およびstringIndexes()も参照してください 。

void QGlyphRun::setStrikeOut(bool strikeOut)

strikeOut が真の場合、このQGlyphRun には取り消し線装飾を適用すべきであることを示します。それ以外の場合は、QGlyphRun には取り消し線装飾を適用せずに描画すべきです。

strikeOut()、setFlag()、およびsetFlags()も参照してください 。

[since 6.5] void QGlyphRun::setStringIndexes(const QList<qsizetype> &stringIndexes)

グリフインデックスに対応する文字列インデックスのリストをstringIndexes

このリストの規則に関する詳細については、stringIndexes() を参照してください。

この関数は Qt 6.5 で導入されました。

stringIndexes() およびsourceString()も参照してください 。

void QGlyphRun::setUnderline(bool underline)

underline がtrueの場合、このQGlyphRun には下線装飾を付けて描画すべきであることを示します。そうでない場合、QGlyphRun には下線装飾を付けずに描画すべきです。

underline()、setFlag()、およびsetFlags()も参照してください 。

[since 6.5] QString QGlyphRun::sourceString() const

グリフランが文字列から作成され、かつその文字列がレイアウトから要求された場合、そのグリフランに対応する文字列を返します。

この関数は Qt 6.5 で導入されました。

setSourceString()、stringIndexes()、およびQTextLayout::glyphRuns()も参照してください 。

bool QGlyphRun::strikeOut() const

このQGlyphRun に打ち消し線装飾を適用すべきかどうかを判定し、true を返します。

setStrikeOut() およびflags()も参照してください 。

[since 6.5] QList<qsizetype> QGlyphRun::stringIndexes() const

グリフランが文字列から構築され、レイアウトから文字列インデックスの取得が要求された場合、各グリフインデックスに対応する文字列インデックスを返します。この場合、返されるベクトルの長さは、glyphIndexes() の長さと同じになります。それ以外の場合は、空になります。

1つのグリフがソース文字列内の複数の文字に対応する場合があるため、文字列インデックスのリストには隙間が生じる可能性があります。例えば、文字列「first」が、文字ペア「fi」の合字を含むフォントによって処理された場合、この5文字の文字列は4つのグリフのみで構成されるグリフランを生成します。 この場合、グリフインデックスは (1, 2, 3, 4) (4つの任意のグリフインデックス)となる可能性がありますが、文字列インデックスは (0, 2, 3, 4) となります。 グリフは文字列の論理的な順序で並んでいるため、このケースでは最初のグリフが文字 0 と 1 にまたがっていることが暗黙的に示されます。

逆に、1 つの文字が複数のグリフを生成する場合もあり、その場合は文字列インデックスのリストに重複するエントリが存在することになります。

文字列インデックスは文字列に対応しており、必要に応じて `sourceString()` を通じて取得できます。

この関数は Qt 6.5 で導入されました。

setStringIndexes()、sourceString()、およびQTextLayout::glyphRuns()も参照してください 。

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

このグリフのランインスタンスを「other 」と入れ替えます。この操作は非常に高速で、失敗することはありません。

bool QGlyphRun::underline() const

この `QGlyphRun ` に下線装飾を適用すべきかどうかを判定し、true を返します。

setUnderline() およびflags()も参照してください 。

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

other と、このQGlyphRun オブジェクトを比較します。グリフインデックスのリスト、位置のリスト、またはフォントのいずれかが異なる場合はtrue を返し、それ以外の場合はfalse を返します。

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

このQGlyphRun オブジェクトにother を割り当てます。

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

other と、このQGlyphRun オブジェクトを比較します。グリフインデックスのリスト、位置のリスト、およびフォントがすべて等しい場合はtrue を返し、そうでない場合はfalse を返します。

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