QLineEdit
いくつかの補完モデルを取り、それらをカテゴリとして整理できるの補完を構築したいと思います。
QSortFilterProxyModel
アイテムのツリーモデルとツリーモデルに基づく実用的なソリューションがあります。
モデルのルート アイテムはカテゴリとして表示され、各ルート アイテムの子はフィルターされたアイテムとして表示されます。次に、カスタマイズQTreeView
されているため、これは適切に表示され、タブ移動はカテゴリを無視します。
これは問題なく動作しますが、新しい補完を書き込むのが非常に難しくなります (設定の可能な値など)。
各補完は、すべてのカテゴリを含むツリー モデルである必要があります。カテゴリごとに単純なリスト モデルを作成し、それらを に結合できるようにしたいと考えていますQTreeModel
。つまり、次のようなものです (疑似 Python コード)。
commands = CommandListModel()
settings = SettingListModel()
completion.setModels([('commands', commands), ('settings', settings)])
私が念頭に置いていたいくつかの異なる解決策がありますが、それらのすべてを実装するのは自明ではないと感じているため、どのルートに進むべきかわかりません。
- いくつかのリスト モデルを 1 つのツリー モデルに結合する
QAbstractProxyModel
ようなクラス (またはカスタム モデル) を記述し、ビュー部分はそのまま残します。
ただし、Python でカスタム ツリー モデルを作成するのは難しく (通常、何か間違ったことをすると segfault が発生します)、過去にパフォーマンスの問題がありました (QStandardItemModel
基礎となるモデルには数千のアイテムがあるため、 と比較して)。
- ツリー モデル (与えられたカテゴリとアイテムのリスト) を満たす各モデルの関数を記述します。
これにより、静的アイテムのリストだけでなく、動的モデルを作成することが難しくなります。
QVBoxLayout
いくつかのリスト モデルを使用し、ビューが のになるように調整しますQListView
。
これは、これまでのところ最も有望に思えます。ただし、補完とフィルタリングによるタブ移動を実装して正しく機能させるのも面倒で、サブビューのサイズも適切に変更する必要があります。
私が考慮していないこれを行う簡単な方法はありますか?将来的に最も痛みが少ないと思われるアプローチはどれですか?