Detailed Description
「テキストオブジェクトはテキストドキュメント内の一つ、あるいはより多くの要素の構造を記述します。例えば、HTMLからインポートされたイメージはテキストオブジェクトを使って実装されます。テキストオブジェクトはドキュメントが表示されるときその要素をレイアウトし、描く方法を知っています。
Qtはカスタムテキストオブジェクトが、QTextCharFormatでカスタムのobject typeを登録することによってドキュメントへ挿入できるようにします。
QTextObjectInterfaceはこのobject typeのために実装されなければならず、そのドキュメントのQAbstractTextDocumentLayoutに登録されます。
①object typeがQTextDocument表示中に出会う時、インターフェースのintrinsicSize()とdrawObject()関数が呼ばれます。
次のリストはカスタムテキストオブジェクトをドキュメントへ挿入するための要求されたステップを説明します。」
「オブジェクトタイプを選択してください。オブジェクトタイプは、QTextFormat::UserObjectと同じかそれ以上の数の整数値です。
QTextCharFormatオブジェクトを作り、選んだオブジェクトタイプと同じ数値をsetObjectType()関数でセットしてください。
QTextObjectInterfaceクラスを実装します。
QAbstractTextDocumentLayout::registerHandler()を、あなたのオブジェクトタイプを登録するためQTextObjectInterfaceのサブクラスのインスタンスで呼びます。
「QChar::objectReplacementCharacterを上で述べた選んだオブジェクトタイプのQTextCharFormatでドキュメントへ挿入します。述べた通り、QTextObjectInterface intrinsicSizeの関数とdrawObjectはその時引数としてQTextFormatと共にコールされるでしょう。リプレイスメントキャラクターがエンカウントされるといつでも。
テキストオブジェクトを実装するクラスはQObjectとQTextObjectInterfaceの両方を継承している必要があります。QObjectは継承する最初のクラスでなければなりません。例えば、」
class SvgTextObject : public QObject, public QTextObjectInterface
{
Q_OBJECT
Q_INTERFACES(QTextObjectInterface)
「テキストオブジェクトのデータはたいていQTextCharFormat.setPropertyを使ってQTextCharFormat内に確保され、それからproperty()によって取り出されます。」
Member Function Documentation
[virtual]QTextObjectInterface::~QTextObjectInterface()
[pure virtual]void QTextObjectInterface::drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format)
「指定したペインターを使ってこのテキストオブジェクトを描画します。
矩形範囲のサイズ、intrinsicSize()で以前計算したサイズです。
矩形範囲の位置はペインターと相対的です。
あなたはドキュメント内のドキュメントとその位置も取得します。」
[pure virtual]QSizeF QTextObjectInterface::intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format)
「intrinsicSize()関数は指定されたドキュメント内のフォーマットで表現されるテキストオブジェクトのサイズを返す。計算されたサイズはこのフォーマットのためにdrawObject()を行うための後のコールのために使われます。」
著者のメモ:
QTextObjectInterfaceは、行内画像文字をQTextEdit内で表現するために利用されます。QtはinsertImageで画像を文字として挿入できます。この機能の内部では、QTextObjectInterfaceが使用されており、私たちはこのクラスを継承することで、画像はもちろん、それ以外のものを、自分達が描きたいように、行内画像文字として挿入することができるようになります。
例えば、ワードソフトのルビ文字、組み文字などというものも、行内画像文字の一つです。