あまり知られていないが、Qtには標準でItemViewに対してインクリメンタルサーチする機構が備わっている。
QAbstractItemView::keyboardSearch
この機能があるので、何もしなくてもItemView上でキーボードを押すごとにアイテム選択が切り替わる。
しかしながら、現在の検索ワードが非表示でわかりにくい上に、IMEには対応しておらず日本語のアイテム検索は不可である。
従来の検索バーのようにQLineEditなどを作成し、適切なスロットを繋げてやればよい。
line_edit = QLineEdit()
tree_view = QTreeView()
def _search(search):
tree_view.keyboardSearch("") # search clear
tree_view.keyboardSearch(search)
line_edit.textChanged.connect(_search)
line_edit.returnPressed.connect(lambda:_search(line_edit.text()))
keyboardSearchを空文字で設定するのは、検索バッファをリセットするため。
もちろん日本語の検索も可能である。
デメリット
お手軽ではあるがやはりデメリットはある。
QTreeViewでcollapse(折りたたまれた状態)されているアイテムは検索できない。
これはQtの仕様なので、あらかじめexpandAll()を呼んでおく。