--- Title: pythonでfoobarのalternativeを作る 33 Author: yamasyuh68 Web: https://mimemo.io/m/0x5QZodJaB43Ojn --- 190625 # treeの検索 結果としてはうまくいきました いろいろ考えてた事はほぼ間違ってたんだけどまあ勉強にはなりました ## 1 階層型のツリーで、複数のカラムを対象とする場合 ①viewはtreeview、modelはstandarditemmodelです ②model.rowCount() で引数無しにするとトップ階層の数が戻ります これに子供の階層は含まれません 引数にアイテムを入れるとその子供の数が返ります ③検索はアイテムと、そのデータに対して行います 一番上のアイテムのインデクスはmodel.index(0,0)です この子供のインデクスについて、n行目のpカラムは model.index(0,0).child(n,p) となります ④インデクスがわかれば index.data() で内容が取得できるので、検索文字と比較します ⑤上のインデクスから順に全ての子供のインデクスを取得してその値を取得して比較、を繰り返す力業ですね <code> - これは私のケースで、汎用的なものでは無いです ## 2 階層型のツリーだけど最初のカラムだけ検索 match でイケます 最初のインデクスを与えてやること 最後のフラグを recursive にすること(子供の階層も検索するため) ## 3 階層無しのリストの検索 find をカラム毎に回せばイケます ## 雑感 - 最初のインデクスの取得方法がわからず少し悩んだ model.createIndex() ってのがあるけど、これはモデルを作るときに使うんだと思う 既存モデルの検索には使えないぽい model.persistentIndexList () ってノモあるけどこれ意味わかんない どういうときに使うんだろう?? - modelとviewとindexと、なんの操作をしているのかわからなくなってくる 頭の整理が必要でした - 上記では 2 でもほぼ目的は達成できたのでここまでやる必要は無かったんだけど少しムキになってやった viewとmodelを分けた以上、modelからのアイテム検索はもっと簡単であるべきだと思う 設計に問題があるように思いますがQtさんどうでしょうね?? ---- → [pythonでfoobarのalternativeを作る #](https://mimemo.io/m/3kyw8o3neWG6Lrg)