このページでは

QAbstractTextDocumentLayout Class

QAbstractTextDocumentLayout クラスは、QTextDocument のカスタムレイアウトを実装するために使用される抽象基底クラスです。詳細...

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

QPlainTextDocumentLayout

注:このクラスのすべての関数は再入可能です。

パブリック型

struct PaintContext
struct Selection

パブリック関数

QAbstractTextDocumentLayout(QTextDocument *document)
QString anchorAt(const QPointF &position) const
virtual QRectF blockBoundingRect(const QTextBlock &block) const = 0
QTextBlock blockWithMarkerAt(const QPointF &pos) const
QTextDocument *document() const
virtual QSizeF documentSize() const = 0
virtual void draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context) = 0
QTextFormat formatAt(const QPointF &pos) const
virtual QRectF frameBoundingRect(QTextFrame *frame) const = 0
QTextObjectInterface *handlerForObject(int objectType) const
virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0
QString imageAt(const QPointF &pos) const
virtual int pageCount() const = 0
QPaintDevice *paintDevice() const
void registerHandler(int objectType, QObject *component)
void setPaintDevice(QPaintDevice *device)
void unregisterHandler(int objectType, QObject *component = nullptr)

シグナル

void documentSizeChanged(const QSizeF &newSize)
void pageCountChanged(int newPages)
void update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.))
void updateBlock(const QTextBlock &block)

保護された関数

virtual void documentChanged(int position, int charsRemoved, int charsAdded) = 0
virtual void drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format)
QTextCharFormat format(int position)
virtual void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)
virtual void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)

詳細な説明

Qt が提供する標準のレイアウトでは、インライン画像、リスト、表などを含む単純なワードプロセッシングに対応しています。

ワードプロセッサや DTP アプリケーションなど、一部のアプリケーションでは、Qt のレイアウトエンジンが提供する機能以上の機能が必要になる場合があります。その場合は、QAbstractTextDocumentLayout をサブクラス化して、テキストドキュメントにカスタムレイアウト動作を提供することができます。

QAbstractTextDocumentLayout サブクラスのインスタンスは、setDocumentLayout() 関数を使用して、QTextDocument オブジェクトに設定することができます。

QTextDocument にカスタムオブジェクトを挿入することができます。詳細については、QTextObjectInterface クラスの説明を参照してください。

「QTextObjectInterface」も参照してください 。

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

[explicit] QAbstractTextDocumentLayout::QAbstractTextDocumentLayout(QTextDocument *document)

指定されたdocument に対して、新しいテキストドキュメントのレイアウトを作成します。

QString QAbstractTextDocumentLayout::anchorAt(const QPointF &position) const

指定されたposition のアンカーへの参照を返します。その位置にアンカーが存在しない場合は、空の文字列を返します。

[pure virtual] QRectF QAbstractTextDocumentLayout::blockBoundingRect(const QTextBlock &block) const

block のバウンディング矩形を返します。

QTextBlock QAbstractTextDocumentLayout::blockWithMarkerAt(const QPointF &pos) const

指定された位置 `pos` に `marker ` を持つブロック(おそらくリストの要素)を返します。

QTextDocument *QAbstractTextDocumentLayout::document() const

このレイアウトが処理対象としているテキストドキュメントを返します。

[pure virtual protected] void QAbstractTextDocumentLayout::documentChanged(int position, int charsRemoved, int charsAdded)

この関数は、ドキュメントの内容が変更されるたびに呼び出されます。変更とは、テキストの挿入、削除、あるいはその両方の組み合わせを指します。変更内容は、変更の開始位置に対応する `position`、ドキュメントから削除された文字数に対応する `charsRemoved`、および追加された文字数に対応する `charsAdded ` によって指定されます。

たとえば、空のドキュメントに「Hello」というテキストを挿入する場合、charsRemoved は0、charsAdded は5(文字列の長さ)となります。

テキストの置換は、削除と挿入の組み合わせです。たとえば、テキスト「Hello」が「Hi」に置換された場合、charsRemoved は 5 となり、charsAdded は 2 となります。

QAbstractTextDocumentLayout のサブクラスにとって、これはドキュメントの内容をレイアウトし、配置するための作業の大部分が行われる中核となる関数です。

たとえば、テキストブロックのみを配置するサブクラスにおいて、この関数の実装では以下の処理を行う必要があります。

  • 提供されたパラメータを使用して、変更されたQTextBlock のリストを特定する。
  • 各QTextBlock オブジェクトに対応するQTextLayout オブジェクトを処理する必要があります。QTextBlock::layout()関数を使用して、QTextBlock のレイアウトにアクセスできます。この処理では、文書のページサイズを考慮に入れる必要があります。
  • ページ総数が変更された場合は、pageCountChanged() シグナルを発行する必要があります。
  • 合計サイズが変更された場合は、documentSizeChanged() シグナルを発生させる必要があります。
  • update() シグナルを発行して、レイアウト内の再描画が必要な領域の再描画をスケジュールする必要があります。

QTextLayoutも参照してください 。

[pure virtual] QSizeF QAbstractTextDocumentLayout::documentSize() const

ドキュメントのレイアウトの合計サイズを返します。

この情報は、表示ウィジェットがスクロールバーを正しく更新するために使用できます。

documentSizeChanged() およびQTextDocument::pageSizeも参照してください 。

[signal] void QAbstractTextDocumentLayout::documentSizeChanged(const QSizeF &newSize)

このシグナルは、ドキュメントのレイアウトサイズがnewSize に変更されたときに発せられます。

QAbstractTextDocumentLayout のサブクラスは、ドキュメントのレイアウトサイズ全体が変更されたときに、このシグナルを発行する必要があります。このシグナルは、テキストドキュメントを表示するウィジェットにとって有用であり、スクロールバーを正しく更新できるようにします。

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

[pure virtual] void QAbstractTextDocumentLayout::draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context)

指定されたpainter を使用して、指定されたcontext を用いてレイアウトを描画します。

[virtual protected] void QAbstractTextDocumentLayout::drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format)

この関数は、指定されたテキスト `textformat` を使用し、`rect ` で指定された矩形内に、指定されたpainter を持つインラインオブジェクト `object` を描画するために呼び出されます。

posInDocument は、ドキュメント内でのオブジェクトの位置を指定します。

デフォルトの実装では、オブジェクトハンドラに対して drawObject() が呼び出されます。この関数は Qt 内でのみ呼び出されます。サブクラスは、この関数を再実装して、インラインオブジェクトの描画をカスタマイズすることができます。

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

[protected] QTextCharFormat QAbstractTextDocumentLayout::format(int position)

指定されたposition で適用される文字形式を返します。

QTextFormat QAbstractTextDocumentLayout::formatAt(const QPointF &pos) const

指定された位置にあるテキスト形式を返します。pos 。

[pure virtual] QRectF QAbstractTextDocumentLayout::frameBoundingRect(QTextFrame *frame) const

frame のバウンディング矩形を返します。

QTextObjectInterface *QAbstractTextDocumentLayout::handlerForObject(int objectType) const

指定されたobjectType のオブジェクトに対するハンドラを返します。

[pure virtual] int QAbstractTextDocumentLayout::hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const

指定されたpoint およびaccuracy に対するカーソル位置を返します。有効なカーソル位置が見つからない場合は-1を返します。

QString QAbstractTextDocumentLayout::imageAt(const QPointF &pos) const

指定された位置pos にある画像のソースを返します。その位置に画像が存在しない場合は、空の文字列を返します。

[pure virtual] int QAbstractTextDocumentLayout::pageCount() const

レイアウトに含まれるページ数を返します。

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

[signal] void QAbstractTextDocumentLayout::pageCountChanged(int newPages)

このシグナルは、レイアウト内のページ数が変更されたときに発せられます。newPages は、更新後のページ数を表します。

QAbstractTextDocumentLayout のサブクラスは、レイアウト内のページ数が変更されたときに、このシグナルを発行する必要があります。ページ数の変更は、レイアウトまたはドキュメントの内容自体の変更によって引き起こされます。

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

QPaintDevice *QAbstractTextDocumentLayout::paintDevice() const

ドキュメントのレイアウトを描画するために使用されるペイントデバイスを返します。

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

[virtual protected] void QAbstractTextDocumentLayout::positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)

指定されたテキスト `format` を使用して、インラインオブジェクト `item ` を配置します。

posInDocument ドキュメント内でのオブジェクトの位置を指定します。

デフォルトの実装では何も行われません。この関数は Qt 内でのみ呼び出されます。サブクラスは、この関数を再実装してインラインオブジェクトの位置をカスタマイズすることができます。

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

void QAbstractTextDocumentLayout::registerHandler(int objectType, QObject *component)

指定されたcomponent を、指定されたobjectType の項目のハンドラとして登録します。

注:registerHandler () は、オブジェクト型ごとに1回ずつ呼び出す必要があります。つまり、同じオブジェクト型の複数の置換文字に対して、ハンドラは1つだけ存在することになります。

テキスト文書のレイアウトは、component の所有権を取得しません。

[virtual protected] void QAbstractTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)

テキスト「format 」に対応するインラインオブジェクト「item 」のサイズを設定します。

posInDocument ドキュメント内でのオブジェクトの位置を指定します。

デフォルトの実装では、item のサイズが、オブジェクトハンドラの intrinsicSize() 関数が返すサイズに合わせて変更されます。この関数は Qt 内でのみ呼び出されます。サブクラスは、この関数を再実装して、インラインオブジェクトのサイズ変更をカスタマイズすることができます。

void QAbstractTextDocumentLayout::setPaintDevice(QPaintDevice *device)

ドキュメントのレイアウトの描画に使用するペイントデバイスを、指定されたdevice に設定します。

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

void QAbstractTextDocumentLayout::unregisterHandler(int objectType, QObject *component = nullptr)

指定されたcomponent を、指定されたobjectType の項目に対するハンドラとして登録解除します。component が指定されていない場合は、すべてのハンドラを登録解除します。

[signal] void QAbstractTextDocumentLayout::update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.))

このシグナルは、矩形 `rect ` が更新されたときに発せられます。

QAbstractTextDocumentLayout のサブクラスは、再描画を行うために、コンテンツのレイアウトが変更された際にこのシグナルを発行する必要があります。

[signal] void QAbstractTextDocumentLayout::updateBlock(const QTextBlock &block)

このシグナルは、指定されたblock が更新されたときに発せられます。

QAbstractTextDocumentLayout のサブクラスは、block のレイアウトが変更された際に、再描画を行うためにこのシグナルを発行する必要があります。

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