完成具有多个模型/类别的QLineEdit

时间:2015-06-12 05:12:46

标签: qt model-view-controller qlineedit qabstractitemmodel qcompleter

我想为QLineEdit构建完成,可以使用多个完成模型并将它们组织为类别。

我有一个基于QSortFilterProxyModel的工作解决方案和项目的树模型:

completion

模型中的根项显示为类别,每个根项的子项显示为过滤项。然后有一个自定义的QTreeView,这样就可以正确显示,tabbing忽略类别等。

这很好用 - 但是它很难编写新的完成(例如设置的可能值)。

每次完成都需要是一个包含所有类别的树模型。我更喜欢为每个类别编写简单的列表模型,然后能够将它们组合成QTreeModel,即类似这样的东西(伪ish Python代码):

commands = CommandListModel()
settings = SettingListModel()

completion.setModels([('commands', commands), ('settings', settings)])

我想到了一些不同的解决方案,但我不确定要走哪条路,因为所有这些解决方案实现起来都非常重要:

  • 编写一个类似QAbstractProxyModel的类(或自定义模型),它将多个列表模型组合到一个树模型中,并使视图部分保持原样。

在Python中编写自定义树模型很困难(如果你任何错误,通常会出现段错误),而且过去我遇到了性能问题(与{{1}相比)因为底层模型中有一千个项目。)

  • 为填充树模型的每个模型编写函数(给定类别和项目列表)。

这使得编写动态模型变得更加困难,而不仅仅是拥有静态项列表。

  • 使用多个列表模型,并将视图调整为QStandardItemModel的{​​{1}}。

这听起来对我来说是最有希望的。但是,通过完成和过滤实现Tab键以使其正常工作可能也很麻烦,并且也适当地调整子视图的大小。

有没有更简单的方法来做到这一点我还没考虑过?未来哪种方法可能是最不痛苦的?

0 个答案:

没有答案