Qt 完成具有多个模型/类别的QLineEdit
我想为一个Qt 完成具有多个模型/类别的QLineEdit,qt,model-view-controller,qlineedit,qabstractitemmodel,qcompleter,Qt,Model View Controller,Qlineedit,Qabstractitemmodel,Qcompleter,我想为一个QLineEdit构建一个完成模型,它可以采用多个完成模型并将它们组织为类别 我有一个基于QSortFilterProxyModel和项目树模型的工作解决方案: 模型中的根项显示为类别,每个根项的子项显示为筛选项。然后有一个定制的QTreeView,这样就可以正确地显示它,选项卡忽略类别,等等 这很好-但是它使编写新的补全变得非常困难(例如,设置的可能值) 每个完成需要是一个包含所有类别的树模型。我更喜欢为每个类别编写简单的列表模型,然后能够将它们组合成一个QTreeModel,即类
QLineEdit
构建一个完成模型,它可以采用多个完成模型并将它们组织为类别
我有一个基于QSortFilterProxyModel
和项目树模型的工作解决方案:
模型中的根项显示为类别,每个根项的子项显示为筛选项。然后有一个定制的QTreeView
,这样就可以正确地显示它,选项卡忽略类别,等等
这很好-但是它使编写新的补全变得非常困难(例如,设置的可能值)
每个完成需要是一个包含所有类别的树模型。我更喜欢为每个类别编写简单的列表模型,然后能够将它们组合成一个QTreeModel
,即类似这样的东西(伪Python代码):
我想到了一些不同的解决方案,但我不确定该走哪条路,因为所有这些解决方案都觉得实施起来非常重要:
- 编写一个类似于类(或自定义模型)的类(或自定义模型),将多个列表模型组合到一个树模型中,并保持视图零件不变
QStandardItemModel
相比,底层模型中有数千项)
- 为每个模型编写填充树模型的函数(给定类别和项目列表)
- 使用多个列表模型,并将视图调整为
s的QListView
QVBoxLayout
有没有我没有考虑过的更简单的方法?哪种方法可能是最简单的方法?更容易-不。我认为最好创建自己的
qabstractemmodel
(而不是代理),根据您的逻辑“合并”任何模型。但这项任务非常复杂。
commands = CommandListModel()
settings = SettingListModel()
completion.setModels([('commands', commands), ('settings', settings)])