Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 完成具有多个模型/类别的QLineEdit_Qt_Model View Controller_Qlineedit_Qabstractitemmodel_Qcompleter - Fatal编程技术网

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代码):

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

  • 编写一个类似于类(或自定义模型)的类(或自定义模型),将多个列表模型组合到一个树模型中,并保持视图零件不变
然而,用Python编写自定义树模型是很困难的(如果您做错了什么,通常是segfults),而且我在过去也遇到过性能问题(与
QStandardItemModel
相比,底层模型中有数千项)

  • 为每个模型编写填充树模型的函数(给定类别和项目列表)
这使得编写动态模型比仅仅拥有静态项列表更困难

  • 使用多个列表模型,并将视图调整为
    QListView
    s的
    QVBoxLayout
这对我来说是迄今为止最有希望的。但是,通过完成和过滤来实现制表符也可能会很麻烦,并且适当地调整子视图的大小


有没有我没有考虑过的更简单的方法?哪种方法可能是最简单的方法?

更容易-不。我认为最好创建自己的
qabstractemmodel
(而不是代理),根据您的逻辑“合并”任何模型。但这项任务非常复杂。
commands = CommandListModel()
settings = SettingListModel()

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