--- Title: pythonでfoobarのalternativeを作る 34 Author: yamasyuh68 Web: https://mimemo.io/m/XpEgPoA25LlmkjW --- 190625 # treeview Delegate 出来た( ´∀`) https://live.staticflickr.com/65535/48188570817_4bc6546810_z.jpg ``` <code> ``` - 結構簡単だった! ①ビューに対してデレゲートオブジェクトのサブクラスをセット ②サブクラスのペイントイベントを自分で書く 他のサイトで見たとおりにやっただけだけど デレゲートクラスはeditCtrlを出すためでもあるようだけど今回は必要なし 選択したときの色を変えたり、いろいろ出来るんだなあ - ただし**ドロップインジケータの描画が微妙におかしい** 心配していたとおりになってしまった インジケータも独自に描画したいと思ってたので研究してみるかな? ## 参考サイト https://www.saltycrane.com/blog/2008/01/pyqt4-qitemdelegate-example-with/ http://mukaimame.blog111.fc2.com/blog-entry-952.html http://flame-blaze.net/archives/4257 ## 仕組み - サブクラスだけ作って中身はpassにしておいても描画は通常通りだった 多分viewクラスは一旦ノーマルに描画して、そのあとでこのサブクラスを呼ぶって事だろう 上書きですね 自分で実装した分だけが反映されるので安心 - そういう意味ではドロップインジケータの描画がおかしくなる理由が不明だけども 選択行の色をいじったからそのせいかな?? - インジケータは、行間に一本線が表示された場合でも、①上の行の下線②下の行の上線の二種類に分かれる ①と②では選択行が異なるから動作も異なる そういった辺りがややこしいので独自に描画しようかなと思ってたところ ---- 190627 # デレゲートいろいろ 1. フォント設定 サブクラスでpaintするときにこれでOK painter.setFont(QFont('Times', 30)) ただし、**行幅は自動では変わらない**のでこれだけではだめ 2. 行幅設定 サブクラスでこれを実装する QSize sizeHint (self, QStyleOptionViewItem option, QModelIndex index) サイズ型を戻すみたいだが、第二パラメータを調べたら QSize decorationSizeってメンバーがあり、このサイズを調べたら(16,16)だった 使い方が今ひとつわからなかったけど、何となくサイズ型を作って返したらうまくいった(・∀・)ノ indexが来るのでそこでタイトル行かどうかを調べて、普通の行よりも大きめのサイズを返してやれば良い 3. テキスト描画の位置指定 行幅の設定とフォントサイズの設定、色を含めてだが、ここら辺は好き好きですよね まだしっくりしてない ちなみに描画の位置指定はdrawTextで設定できたんだね、上下と左右とそれぞれ 今までのリストはおまかせで十分だったけどデレゲートすると自分で設定しなくちゃいけない、当たり前だな (・∀・) <code> ---- 190628- - デレゲート、マウスオーバー実装、色の検討 デレゲートロジックを見直し再コーディング 思いつきでやってると付け足しのコードになって、動けばそれでも良いんだが不具合が生じたときに対応難しい 振り返ってシンプルな形で再コーディングってのは必要だな ---- → [pythonでfoobarのalternativeを作る](https://mimemo.io/m/3kyw8o3neWG6Lrg)