38314
いつもお世話になっております。  
`QTextBlockUserData`についてお聞きしたいのですが、  
割注と、縦中横の実現をしてみたいな～と思っています。  
PySideのText系のクラスで、最後に怪しいと思っている  
もので、これが自在に操れるようになればいいな～と思  
っています。  
[Programming Talk-
QTextBlockUserData](http://nullege.com/codes/search/PyQt4.QtGui.QTextBlockUserData)  
カスタム系では珍しくサンプルコードなどがある分野です。  
`QTextBlock`で、独自のユーザー定義のブロックをセット  
できるようです。  
[QTextBlock
setUserData](http://pyside.github.io/docs/pyside/PySide/QtGui/QTextBlock.html)  
ここに書いてある具体例は、仮に私がプログラミングエディタを  
作成している場合、統合された開発環境をセットするべく、デバッガ  
をセットしたいとき、その行（ブロック）を、ブレークポイントにする  
という独自の設定を行い、セットできるという話のようです。  
つまり、コンピューターが、そのブロックはブレークポイントだ、  
と判定できるようにするという、確かに他の要素にはない独自の判断要素  
をセットできるようです。(ブール型でもできそうな気がする？）  
以前の質問より、割注や縦中横を実装したいと思っていますが、これらは  
どちらも、`QTextBlock`に関係した物だろうと思います。  
ここで、独自のブロックを作成すれば、割注や縦中横を実装できないかな  
と思っています。  
現在、このブロックは、特殊な判定をプログラムに行わせるものなのだな。  
という程度で、ブロックのいわば、ブール系の要素を行うためのもので、  
ブロックそのものの態様（１本のラインで２行分とか、縦書きとか）を変える事  
ができるものだとはなんとなく思っていません。少し手ほどきをしていただけま  
せんか。お願いします。
CC BY-SA 3.0
2017-09-29T11:37:45.690
38300
2017-09-30T01:24:59.030
24284
question
python python3 qt
QTextBlockUserDataの使い方
ブロックの考え方等、`QTextDocument`のデータ(コンテンツ)構造は[Rich Text Document
Structure](http://doc.qt.io/qt-4.8/richtext-structure.html)の文書が参考になると思います。

ここには、`QTextBlock`は(文字通り)テキストの1ブロックを表すもの、とあります。  
「ブロック」の単位をどう定義するかは実装者(プログラマ)次第なので、「割中」や「縦中横」の部分を「ブロック」とするならば、その付加情報として`QTextBlockUserData`を紐付けるのは有効な考え方と思います。(`QTextBlockUserData`は`QTextBlock`に対し1:1の情報であるので)

なお、`QTextBlockUserData`は何もメソッドを持たないクラス(インターフェース)なので、`QTextBlock`に自動的に作用する要素はないようです。適切なサブクラスを定義し、アプリケーションが付加情報の読み書きをする必要があるようです。
CC BY-SA 3.0
2017-09-30T01:24:59.030
38314
2017-09-30T01:24:59.030
20098
38300
answer