我想为QLineEdit
构建完成,可以使用多个完成模型并将它们组织为类别。
我有一个基于QSortFilterProxyModel
的工作解决方案和项目的树模型:
模型中的根项显示为类别,每个根项的子项显示为过滤项。然后有一个自定义的QTreeView
,这样就可以正确显示,tabbing忽略类别等。
这很好用 - 但是它很难编写新的完成(例如设置的可能值)。
每次完成都需要是一个包含所有类别的树模型。我更喜欢为每个类别编写简单的列表模型,然后能够将它们组合成QTreeModel
,即类似这样的东西(伪ish Python代码):
commands = CommandListModel()
settings = SettingListModel()
completion.setModels([('commands', commands), ('settings', settings)])
我想到了一些不同的解决方案,但我不确定要走哪条路,因为所有这些解决方案实现起来都非常重要:
QAbstractProxyModel
的类(或自定义模型),它将多个列表模型组合到一个树模型中,并使视图部分保持原样。在Python中编写自定义树模型很困难(如果你任何错误,通常会出现段错误),而且过去我遇到了性能问题(与{{1}相比)因为底层模型中有一千个项目。)
这使得编写动态模型变得更加困难,而不仅仅是拥有静态项列表。
QStandardItemModel
的{{1}}。这听起来对我来说是最有希望的。但是,通过完成和过滤实现Tab键以使其正常工作可能也很麻烦,并且也适当地调整子视图的大小。
有没有更简单的方法来做到这一点我还没考虑过?未来哪种方法可能是最不痛苦的?