QAbstractTextDocumentLayout Class

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

ヘッダー #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 サブクラスのインスタンスは、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

与えられた位置posmarker があるブロック(おそらくリストアイテム)を返す。

QTextDocument *QAbstractTextDocumentLayout::document() const

このレイアウトが操作されているテキストドキュメントを返します。

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

この関数は、文書の内容が変更されるたびに呼び出される。変更は、テキストが挿入されたり、削除されたり、あるいはこの2つが組み合わされたときに発生する。変更の開始文字位置、文書から削除された文字数、追加された文字数に対応するpositioncharsRemovedcharsAdded で指定されます。

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

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

QAbstractTextDocumentLayout のサブクラスでは、これは中心的な機能で、文書内容をレイアウトして配置する作業の大部分がここで行われます。

例えば、テキストのブロックを並べるだけのサブクラスでは、この関数の実装は次のようにしなければならない:

  • 提供されたパラメータを使用して、変更されたQTextBlock(s) のリストを決定する。
  • 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)

与えられたcontext を用いて、与えられたpainter でレイアウトを描画します。

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

この関数は、rect で指定された矩形内に、指定されたテキストformat を用いて、与えられた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

指定されたaccuracy で、指定されたpoint のカーソル位置を返す。有効なカーソル位置が見つからない場合は -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)

与えられたobjectType のアイテムのハンドラとして、与えられたcomponent の登録を解除する。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 のレイアウトが変更されたときにこのシグナルを発するべきである。

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