QAbstractTextDocumentLayout Class

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

Header: #include <QAbstractTextDocumentLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Inherits: QObject
Inherited By:

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つが組み合わさったときです。変更の開始文字位置、ドキュメントから削除された文字数、および追加された文字数に対応するpositioncharsRemoved 、およびcharsAdded によって変更が指定されます。

たとえば、空の文書に「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 で指定された矩形内に、painter で指定されたインラインオブジェクトobject を、format で指定されたテキストを用いて描画するために呼び出されます。

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 のレイアウトが変更されたときにこのシグナルを発するべきである。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。