Qt 在两个视图中显示QFileSystemModel:树状视图和所选项目的TableView/ListView

Qt 在两个视图中显示QFileSystemModel:树状视图和所选项目的TableView/ListView,qt,qml,Qt,Qml,我有一个从QFileSystemModel派生的模型。我通过一个角色对其进行了扩展,该角色持有一个bool值,该值指示是否已选择某个文件供以后使用。此模型显示在qmlTreeView中。在此视图中,我可以通过复选框选择文件。我有一个存储在我的模型中的所选索引的QPersistentModelIndex列表 在另一个视图(可能是列表视图或表格视图)中,我只想显示在树视图中选择的项目。在另一个视图中,我还希望能够删除选择。所以问题是,这是否可以只使用一个模型(或者中间可能有一个QSortFilter

我有一个从
QFileSystemModel
派生的模型。我通过一个角色对其进行了扩展,该角色持有一个bool值,该值指示是否已选择某个文件供以后使用。此模型显示在
qml
TreeView
中。在此视图中,我可以通过复选框选择文件。我有一个存储在我的模型中的所选索引的
QPersistentModelIndex
列表


在另一个视图(可能是
列表视图
表格视图
)中,我只想显示在
树视图
中选择的项目。在另一个视图中,我还希望能够删除选择。所以问题是,这是否可以只使用一个模型(或者中间可能有一个QSortFilterProxyModel)完成,或者是否需要两个模型相互通信。

您可以根据任何角色筛选项目。您需要重写
QSortFilterProxyModel::filterAcceptsRow()
函数,并使用
setFilterRole()
函数将筛选器角色设置为您的自定义角色。我根据您的建议编辑了问题。您是否尝试将
setFilterRole(FileSystemModel::BoolRole)
设置为代理模型?否,但即使我尝试,结果也是一样的。实际上,当我尝试在没有任何内容的情况下执行QIdentityProxyModel时,也没有显示任何内容。当您在QML中执行
FileListModel{id:FileListModel}
时,您正在创建一个新的
FileListModel
,而不是使用您调用的
setContextProperty