LoginSignup
3
3

More than 5 years have passed since last update.

PySideでお手軽にItemViewのインクリメンタルサーチを実装する

Last updated at Posted at 2016-12-24

あまり知られていないが、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()を呼んでおく。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3