質問: いつもお世話になっております。 `QTextBlockUserData`についてお聞きしたいのですが、 割注と、縦中横の実現をしてみたいな~と思っています。 PySideのText系のクラスで、最後に怪しいと思っている もので、これが自在に操れるようになればいいな~と思 っています。 Programming Talk-QTextBlockUserData カスタム系では珍しくサンプルコードなどがある分野です。 `QTextBlock`で、独自のユーザー定義のブロックをセット できるようです。 QTextBlock setUserData ここに書いてある具体例は、仮に私がプログラミングエディタを 作成している場合、統合された開発環境をセットするべく、デバッガ をセットしたいとき、その行(ブロック)を、ブレークポイントにする という独自の設定を行い、セットできるという話のようです。 つまり、コンピューターが、そのブロックはブレークポイントだ、 と判定できるようにするという、確かに他の要素にはない独自の判断要素 をセットできるようです。(ブール型でもできそうな気がする?) 以前の質問より、割注や縦中横を実装したいと思っていますが、これらは どちらも、`QTextBlock`に関係した物だろうと思います。 ここで、独自のブロックを作成すれば、割注や縦中横を実装できないかな と思っています。 現在、このブロックは、特殊な判定をプログラムに行わせるものなのだな。 という程度で、ブロックのいわば、ブール系の要素を行うためのもので、 ブロックそのものの態様(1本のラインで2行分とか、縦書きとか)を変える事 ができるものだとはなんとなく思っていません。少し手ほどきをしていただけま せんか。お願いします。
回答: ブロックの考え方等、`QTextDocument`のデータ(コンテンツ)構造はRich Text Document Structureの文書が参考になると思います。 ここには、`QTextBlock`は(文字通り)テキストの1ブロックを表すもの、とあります。 「ブロック」の単位をどう定義するかは実装者(プログラマ)次第なので、「割中」や「縦中横」の部分を「ブロック」とするならば、その付加情報として`QTextBlockUserData`を紐付けるのは有効な考え方と思います。(`QTextBlockUserData`は`QTextBlock`に対し1:1の情報であるので) なお、`QTextBlockUserData`は何もメソッドを持たないクラス(インターフェース)なので、`QTextBlock`に自動的に作用する要素はないようです。適切なサブクラスを定義し、アプリケーションが付加情報の読み書きをする必要があるようです。