QAbstractTextDocumentLayout Class
QAbstractTextDocumentLayout クラスは、QTextDocument のカスタムレイアウトを実装するために使用される抽象基底クラスです。詳細...
| ヘッダー: | #include <QAbstractTextDocumentLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 継承元: | QObject |
| 継承元: |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QAbstractTextDocumentLayout は、リッチテキスト処理 API の一部です。
注:このクラスのすべての関数は再入可能です。
パブリック型
| 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.