QTextLayout Class
QTextLayout クラスは、テキストのレイアウトとレンダリングに使用します。詳細...
Header: | #include <QTextLayout> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 継承メンバを含む全メンバ一覧
- QTextLayoutはリッチテキスト処理APIの一部です。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
struct | FormatRange |
enum | CursorMode { SkipCharacters, SkipWords } |
(since 6.5) enum | GlyphRunRetrievalFlag { RetrieveGlyphIndexes, RetrieveGlyphPositions, RetrieveStringIndexes, RetrieveString, RetrieveAll } |
flags | GlyphRunRetrievalFlags |
パブリック関数
QTextLayout() | |
QTextLayout(const QString &text) | |
QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr) | |
~QTextLayout() | |
void | beginLayout() |
QRectF | boundingRect() const |
bool | cacheEnabled() const |
void | clearFormats() |
void | clearLayout() |
QTextLine | createLine() |
Qt::CursorMoveStyle | cursorMoveStyle() const |
void | draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const |
void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const |
void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const |
void | endLayout() |
QFont | font() const |
QList<QTextLayout::FormatRange> | formats() const |
QList<QGlyphRun> | glyphRuns(int from = -1, int length = -1) const |
(since 6.5) QList<QGlyphRun> | glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const |
bool | isValidCursorPosition(int pos) const |
int | leftCursorPosition(int oldPos) const |
QTextLine | lineAt(int i) const |
int | lineCount() const |
QTextLine | lineForTextPosition(int pos) const |
qreal | maximumWidth() const |
qreal | minimumWidth() const |
int | nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const |
QPointF | position() const |
int | preeditAreaPosition() const |
QString | preeditAreaText() const |
int | previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const |
int | rightCursorPosition(int oldPos) const |
void | setCacheEnabled(bool enable) |
void | setCursorMoveStyle(Qt::CursorMoveStyle style) |
void | setFont(const QFont &font) |
void | setFormats(const QList<QTextLayout::FormatRange> &formats) |
void | setPosition(const QPointF &p) |
void | setPreeditArea(int position, const QString &text) |
void | setText(const QString &string) |
void | setTextOption(const QTextOption &option) |
QString | text() const |
const QTextOption & | textOption() const |
詳細説明
QTextLayoutは、Unicode準拠のレンダリング、改行、カーソル位置の処理など、最新のテキストレイアウトエンジンに期待される多くの機能を提供します。また、WYSIWYGアプリケーションにとって重要な、デバイスに依存しないレイアウトの生成とレンダリングも可能です。
このクラスはかなり低レベルのAPIを持っており、特別なウィジェット用に独自のテキスト・レンダリングを実装するのでなければ、おそらく直接使用する必要はないだろう。
QTextLayoutはプレーンテキストとリッチテキストの両方で使用できます。
QTextLayoutは、与えられた幅を持つQTextLine インスタンスのシーケンスを作成するために使用することができ、画面上に独立して配置することができます。レイアウトが完了したら、これらの線をペイント・デバイスに描画することができます。
レイアウトするテキストはコンストラクタで指定するか、setText ()で設定する。
レイアウトは、QTextLine オブジェクトのシーケンスとして見ることができます。QTextLine インスタンスを作成するにはcreateLine() を使用し、作成された行を取得するにはlineAt() またはlineForTextPosition() を使用します。
以下は、レイアウト段階を示すコード・スニペットである:
int leading = fontMetrics.leading(); qreal height = 0; textLayout.setCacheEnabled(true); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(lineWidth); height += leading; line.setPosition(QPointF(0, height)); height += line.height(); } textLayout.endLayout();
レイアウトのdraw ()関数を呼び出すことで、テキストをレンダリングできます:
各行を個別に描画することも可能で、たとえばウィジェットに収まる最後の行をエライドして描画することもできます:
QPainter painter(this); QFontMetrics fontMetrics = painter.fontMetrics(); int lineSpacing = fontMetrics.lineSpacing(); int y = 0; QTextLayout textLayout(content, painter.font()); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(width()); const int nextLineY = y + lineSpacing; if (height() >= nextLineY + lineSpacing) { line.draw(&painter, QPoint(0, y)); y = nextLineY; } else { const QString lastLine = content.mid(line.textStart()); const QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width()); painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine); line = textLayout.createLine(); break; } } textLayout.endLayout();
テキスト内の任意の位置に対して、isValidCursorPosition(),nextCursorPosition(),previousCursorPosition() で有効なカーソル位置を見つけることができます。
QTextLayout 自体は、setPosition() で位置決めできます。boundingRect() と、minimumWidth() と、maximumWidth() があります。
QStaticTextも参照してください 。
メンバ型ドキュメント
enum QTextLayout::CursorMode
定数 | 値 |
---|---|
QTextLayout::SkipCharacters | 0 |
QTextLayout::SkipWords | 1 |
[since 6.5]
enum QTextLayout::GlyphRunRetrievalFlag
flags QTextLayout::GlyphRunRetrievalFlags.
GlyphRunRetrievalFlag は、glyphRuns ()関数に渡されるフラグを指定し、レイアウトのどのプロパティがQGlyphRun オブジェクトで返されるかを決定します。各プロパティはメモリを消費し、追加の割り当てを必要とする可能性があるため、後でアクセスする必要があるプロパティのみを要求するのが良い習慣です。
定数 | 値 | 説明 |
---|---|---|
QTextLayout::RetrieveGlyphIndexes | 0x1 | グリフに対応するフォント内のインデックスを取得します。 |
QTextLayout::RetrieveGlyphPositions | 0x2 | レイアウト内のグリフの相対位置を取得します。 |
QTextLayout::RetrieveStringIndexes | 0x4 | 各グリフに対応する元の文字列内のインデックスを取得します。 |
QTextLayout::RetrieveString | 0x8 | レイアウトから元のソース文字列を取得します。 |
QTextLayout::RetrieveAll | 0xffff | レイアウトの利用可能なプロパティをすべて取得します。 |
この列挙型は Qt 6.5 で導入されました。
GlyphRunRetrievalFlags 型はQFlags<GlyphRunRetrievalFlag> の typedef です。これは GlyphRunRetrievalFlag 値の OR の組み合わせを格納します。
glyphRuns() およびQTextLine::glyphRuns()も参照してください 。
メンバ関数 ドキュメント
QTextLayout::QTextLayout()
空のテキストレイアウトを構築します。
setText()も参照して ください。
QTextLayout::QTextLayout(const QString &text)
与えられたtext をレイアウトするテキストレイアウトを構築します。
QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr)
指定されたfont で、指定されたtext をレイアウトするテキストレイアウトを構築します。
すべての メ ト リ ッ ク と レ イ ア ウ ト の計算は、 描線デバ イ スpaintdevice に基づいて行われます。paintdevice がnullptr
の場合、 計算は画面 メ ト リ ッ ク で行われます。
[noexcept]
QTextLayout::~QTextLayout()
レイアウトを破棄します。
void QTextLayout::beginLayout()
レイアウト処理を開始します。
警告 そのため、以前の内容を参照している既存のQTextLine オブジェクトはすべて破棄する必要があります。
endLayout()も参照してください 。
QRectF QTextLayout::boundingRect() const
レイアウト内のすべての線を含む最小の矩形。
bool QTextLayout::cacheEnabled() const
完全なレイアウト情報がキャッシュされている場合はtrue
を返し、そうでない場合はfalse
を返す。
setCacheEnabled()も参照 。
void QTextLayout::clearFormats()
テキストレイアウトがサポートする追加フォーマットのリストをクリアします。
formats() およびsetFormats() も参照 。
void QTextLayout::clearLayout()
レイアウトの行情報をクリアします。この関数を呼び出した後、lineCount() は 0 を返します。
警告: そのため、以前の内容を参照していた既存のQTextLine オブジェクトはすべて破棄する必要があります。
QTextLine QTextLayout::createLine()
レイアウトに挿入されるテキストがあれば、レイアウトされる新しいテキスト行を返し、なければ無効なテキスト行を返します。
テキスト・レイアウトは、レイアウト内の最後の行の後、またはレイアウトが空の場合は先頭から始まる新しい行オブジェクトを作成します。レイアウトは内部カーソルを保持し、QTextLine::setLineWidth ()関数が呼び出されると、各行はカーソル位置以降のテキストで満たされます。
QTextLine::setLineWidth()が呼び出されると、新しい行が作成され、テキストで塗りつぶされます。この処理を繰り返すと、QTextLayout に含まれるテキスト・ブロック全体がレイアウトされます。レイアウトに挿入するテキストが残っていない場合、返されるQTextLine は有効ではありません(isValid() は false を返します)。
Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
このQTextLayout のカーソル移動スタイル。デフォルトはQt::LogicalMoveStyle です。
setCursorMoveStyle()も参照してください 。
void QTextLayout::draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const
pos で指定された位置のペインタp 上にレイアウト全体を描画します。描画されたレイアウトは、指定されたselections を含み、clip で指定された矩形内にクリッピングされます。
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const
現在のペンと指定されたwidth でテキストカーソルを、指定されたpainter を使って、指定されたposition に描画します。テキスト内の対応する位置はcursorPosition で指定されます。
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const
これはオーバーロードされた関数です。
テキス ト カー ソルを、 指定 さ れたpainter を用いて、 カ レ ン ト ペンで、 与えられたposition に描画する。テキスト内の対応する位置はcursorPosition で指定されます。
void QTextLayout::endLayout()
レイアウト処理を終了する。
beginLayout()も参照 。
QFont QTextLayout::font() const
レイアウトに使用されている現在のフォント、または何も設定されていない場合はデフォルトのフォントを返します。
setFont()も参照 。
QList<QTextLayout::FormatRange> QTextLayout::formats() const
テキスト・レイアウトがサポートしている追加書式のリストを返します。
setFormats() およびclearFormats() も参照 。
QList<QGlyphRun> QTextLayout::glyphRuns(int from = -1, int length = -1) const
これはオーバーロードされた関数です。
このQTextLayout の位置from から始まるlength キ ャ ラ ク タ に対応す る すべてのグ リ フ のグ リ フ イ ンデ ッ ク ス と 位置を返 し ます。こ れは高価な関数であ り 、 時間制約のあ る コ ン テ キ ス ト では呼び出すべきではあ り ません。
from が 0 よ り 小 さ い と き は、 グ リ フの実行は レ イ ア ウ ト 内の最初のキ ャ ラ ク タ か ら 始ま り ます。length が 0 よ り 小 さ い と き は、 開始位置か ら 文字列全体にわた り 行われます。
注: これは、 glyphRuns(from, length, QTextLayout::GlyphRunRetrievalFlag::GlyphIndexes | QTextLayout::GlyphRunRetrievalFlag::GlyphPositions) を呼び出すのと同じです。
draw() およびQPainter::drawGlyphRun()も参照して ください。
[since 6.5]
QList<QGlyphRun> QTextLayout::glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const
これはオーバーロードされた関数です。
このQTextLayout の位置from から始まるlength キ ャ ラ ク タ に対応す る すべてのグ リ フ のグ リ フ イ ンデ ッ ク ス と 位置を返 し ます。こ れは高価な関数であ り 、 時間制約のあ る コ ン テ キ ス ト では呼び出すべきではあ り ません。
from が 0 よ り 小 さ い と き は、 グ リ フの実行は レ イ ア ウ ト 内の最初のキ ャ ラ ク タ か ら 始ま り ます。length が 0 よ り 小 さ い と き は、 開始位置か ら 文字列全体にわた る。
retrievalFlags は、QGlyphRun のど のプ ロ パテ ィ を レ イ ア ウ ト か ら 取得す る か を指定 し ます。割り当てとメモリ消費を最小限に抑えるため、後でアクセスする必要のあるプロパティのみを含むように設定する必要があります。
この関数は Qt 6.5 で導入されました。
draw() およびQPainter::drawGlyphRun()も参照してください 。
bool QTextLayout::isValidCursorPosition(int pos) const
位置pos が有効なカーソル位置の場合、true
を返します。
Unicode コ ン テ キ ス ト 内では、 テ キ ス ト 内の位置が Unicode サ ロ ゲー ト ま たは書記素 ク ラ ス タ 内にあ る ため、 有効な カー ソ ル位置で はない も のがあ り ます。
書記素クラスタとは、2つ以上のUnicode文字の並びで、画面上で1つの不可分の実体を形成するものです。例えば、ラテン文字`Ä'はUnicodeでは`A'(0x41)と結合ダイアレシス(0x308)の2つの文字で表すことができます。テキストカーソルはこの2つの文字の前後にのみ置くことができます。指示言語では、すべての音節が書記素クラスターを形成します。
int QTextLayout::leftCursorPosition(int oldPos) const
oldPos の左隣りのカーソル位置を返します。これは、双方向の並べ替えを行った後の、文字の視覚的な位置に依存する。
rightCursorPosition() およびpreviousCursorPosition()も参照のこと 。
QTextLine QTextLayout::lineAt(int i) const
このテキストレイアウトにおけるテキストのi- 番目の行を返します。
lineCount() およびlineForTextPosition() も参照 。
int QTextLayout::lineCount() const
このテキストレイアウトの行数を返します。
lineAt() も参照 。
QTextLine QTextLayout::lineForTextPosition(int pos) const
pos で指定したカーソル位置を含む行を返します。
isValidCursorPosition() およびlineAt()も参照 。
qreal QTextLayout::maximumWidth() const
レイアウトが拡張できる最大幅。これは、実質的にテキスト全体の幅です。
警告: 警告: この関数は、レイアウトが完了した後にのみ有効な値を返します。
minimumWidth()も参照 。
qreal QTextLayout::minimumWidth() const
レイアウトが必要とする最小幅。これは、レイアウトの最も小さい分割不可能な部分文字列の幅です。
警告: この関数は、レイアウトが行われた後にのみ有効な値を返します。
maximumWidth()も参照のこと 。
int QTextLayout::nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
与えられたカーソルmode を尊重するoldPos の次の有効なカーソル位置を返す。oldPos が有効なカーソル位置でない場合、oldPos の値を返す。
isValidCursorPosition() およびpreviousCursorPosition()も参照 。
QPointF QTextLayout::position() const
レイアウトのグローバル位置。これは、外接矩形やレイアウト処理に依存しません。
setPosition() も参照 。
int QTextLayout::preeditAreaPosition() const
編集が行われる前に処理される、テキストレイアウト内の領域の位置を返します。
preeditAreaText() も参照 。
QString QTextLayout::preeditAreaText() const
編集が行われる前にレイアウトに挿入されるテキストを返します。
preeditAreaPosition() も参照 。
int QTextLayout::previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
与えられたカーソルmode を尊重する、oldPos の前の最初の有効なカーソル位置を返します。oldPos が有効なカーソル位置でない場合は、oldPos の値を返します。
isValidCursorPosition() およびnextCursorPosition()も参照のこと 。
int QTextLayout::rightCursorPosition(int oldPos) const
oldPos の右隣のカーソル位置を返す。これは、双方向並び替え後の文字の視覚的な位置に依存する。
leftCursorPosition() およびnextCursorPosition()も参照の こと。
void QTextLayout::setCacheEnabled(bool enable)
enable が真の場合、完全なレイアウト情報のキャッシュを有効にします。そうでない場合、レイアウトのキャッシュを無効にします。通常、QTextLayout は、endLayout() を呼び出した後、メモリの消費を抑えるために、レイアウト情報のほとんどを捨ててしまいます。しかし、レイアウトされたテキストを直接描画したい場合は、キャッシュを有効にすると描画が大幅に速くなります。
cacheEnabled()も参照 。
void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)
視覚的なカーソル移動スタイルを、与えられたstyle に設定します。QTextLayout がドキュメントによってバックアップされている場合、これを無視してQTextDocument のオプションを使うことができます。このオプションはQLineEdit のようなウィジェット、またはQTextDocument のないカスタムウィジェット用です。 デフォルト値はQt::LogicalMoveStyle です。
cursorMoveStyle()も参照してください 。
void QTextLayout::setFont(const QFont &font)
レイアウトのフォントを指定されたfont に設定します。レイアウトは無効になり、再度レイアウトする必要があります。
font()も参照して ください。
void QTextLayout::setFormats(const QList<QTextLayout::FormatRange> &formats)
テ キ ス ト レ イ ア ウ ト がサポー ト す る 追加書式をformats に設定 し ます。 こ れ ら の書式は、 編集前領域のテ キ ス ト をその ま ま適用 し ます。
formats() およびclearFormats() も参照 。
void QTextLayout::setPosition(const QPointF &p)
テキスト・レイアウトをp に移動します。
position()も参照して ください。
void QTextLayout::setPreeditArea(int position, const QString &text)
編集前に処理されるレイアウト内の領域のposition とtext を設定します。レイアウトは無効となり、再度レイアウトする必要があります。
preeditAreaPosition() およびpreeditAreaText() も参照して ください。
void QTextLayout::setText(const QString &string)
レイアウトのテキストを、与えられたstring に設定します。レイアウトは無効となり、再度レイアウトする必要があります。
このQTextLayout をQTextDocument の一部として使用する場合、このメソッドは何の効果も持たないことに注意。
text()も参照して ください。
void QTextLayout::setTextOption(const QTextOption &option)
レ イ ア ウ ト 処理を制御す る テ キ ス ト オプシ ョ ン構造を、 与え ら れたoption に設定 し ます。
textOption()も参照して ください。
QString QTextLayout::text() const
レイアウトのテキストを返します。
setText()も参照 。
const QTextOption &QTextLayout::textOption() const
レイアウト処理の制御に使用されている現在のテキスト・オプションを返します。
setTextOption()も参照して ください。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。