问题标签 [qsortfilterproxymodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - 将 QSortFilterProxyModel 与树模型一起使用
我有一个QDirModel
其当前目录已设置。然后我有一个QListView
应该显示该目录中的文件。这工作正常。
现在我想限制显示的文件,所以它只显示png文件(文件名以 .png 结尾)。问题是使用 aQSortFilterProxyModel
并设置过滤器正则表达式也会尝试匹配文件的每个父级。根据文档:
对于分层模型,过滤器递归地应用于所有子级。如果父项与过滤器不匹配,则不会显示其子项。
那么,我如何QSortFilterProxyModel
才能只过滤目录中的文件,而不是它所在的目录?
qt - 在 Qt 中如何对 QModelIndex 的直接子索引进行排序
我正在编写一个 C++ 应用程序,它使用 Qt 类来处理某些数据模型。为此,我继承自QAbstractItemModel
:
在某些时候,我的应用程序中需要一个排序/过滤选项,所以我还创建了一个继承自的类QSortFilterProxyModel
为了实现排序,我使用了默认QSortFilterProxyModel::sort()
方法(我没有在我的代理模型类中重新实现它)并且有一段时间它似乎可以工作。
但在某些时候,我注意到实际QSortFilterProxyModel::sort()
方法对整个模型进行排序,而我需要的是仅对某个索引的直接子项进行排序。
我试图重新实现类的sort()
方法EventModel
,但过了一会儿我意识到这QSortFilterProxyModel::sort()
根本不是指它。另一方面,我不确定如何以安全的方式重新排列索引,以便显示模型的视图不会崩溃。
我认为一定有一种方法可以只对某个的直接孩子进行排序QModelIndex
,但我还没有找到。
是否有任何教程/示例可以演示我的案例的可能解决方案,或有关如何做到这一点的一些指导方针?
问候
sqlite - PyQT QAbstractProxyModel mapToSource
我已经将我的 QTableView 设置为视图,该视图的模型是 QSqlQueryModel。
对不起,塞尔维亚的信件,不过你会明白我在说什么。
屏幕截图 2,在 searchName 函数之后。再次,请原谅我的塞尔维亚字母。现在的问题;
如果我单击第一个屏幕截图中的一行,我会在控制台中打印行号和列号,例如 8,2。如果我单击第二个屏幕截图中的一行(打开代理过滤器的行),我会得到第 -1 行,第 -1 列。
我将如何实现 QAbstractProxyModel 和 mapToSource 方法来获取真实的行号和列号?
:编辑:
我得到的输出:
第 9 行第 1 列名称 JOHN DOE
qt - appendRow 后带有 QStandardItemModel 的 QSortFilterProxyModel 不起作用
这是我得到的:
- 一个
QTreeView
小部件(*); - 源模型
MainModel
继承自QStandardItemModel
. 没有重新实现虚data() const
方法; - 代理
MainFilterProxyModel
继承自QSortFilterProxyModel
;
那个树:
所以主要问题是当我试图添加一个像 (**) 代码那样的CHILD-row时。过滤器代理模型,在文档被添加到源模型后,不知道新行,也没有在树上显示。
我确定代理在方法完成工作QStandardItemModel
时没有收到信号appendRow
,因此代理无法过滤新行,也没有使其可见。
有什么帮助吗?
谢谢。
PS:如果我关闭代理,一切都很好。但问题不在于代理。代理只是没有得到关于附加到主源模型的新行的信号......
(*)这里是QTreeView
:
(**)这是我的附加功能:
qt - QSortFilterProxyModel 并按整数、布尔值过滤
我有一个QSortFilterProxyModel
连接到一个QSqlQueryModel
. 在基础查询中有布尔和整数字段。我想按这些布尔值、整数等值进行过滤。令人惊讶的是(或者我错了)QSortFilterProxyModel
仅按字符串过滤。例如,如果您想过滤 ID(通常是整数),这就是一个“问题”。例如,如果您尝试过滤ID=22
,您将获得所有内部带有“22”的 ID(122、222、322 等)。请参阅此链接以获取非非常优雅的解决方案。
但是您将如何按布尔字段过滤?有人可以给点提示吗?我想我必须子类化QSortFilterProxyModel
,还是有另一种方法?
expand - Qt:ProxyModel、QTreeView 和带过滤的委托设置无法正确更新
我有一个 QTreeView 设置显示 QSortFilteredProxyModel 在 filterAcceptsRow() 中自定义过滤,只接受取决于父行值的值的行(通过 QStyledItemDelegate 派生类在 QComboBox 中选择。例如,如果我在一行中选择“类型” 值“宝马”,我想为这个特殊情况显示孩子。这对第一个项目很有用,我可以在 Item1 中选择这些值多个级别(最多 5 个级别)。一切都很好。
但是,我注意到,一旦我使用 item1 和此自定义过滤,然后添加 item2,问题就开始了。我注意到的第一件事是,QTreeView 确实取消了 item1/item2 的公共父项,并且只显示了根项的子项。正常行为(以及添加 item1 的行为确实如此)是扩展 item1 的父项。为什么这会对第二个项目感到困惑,并且只有当我一直在玩 item1 的儿童设置 idk 时。此外,我注意到在 item2 中过滤无法正常工作。我在 item2->Type 中有一个 QComboBox,其子项取决于 item2->Type 值。. QComboBox 的默认值的第一个子项仍会按应有的方式显示,但是在更改 QComboBox 时,视图不再更新,并且留在 item2/item3/... 中的第一个加载的子项 但是,使用正确的值/索引调用 Delegate::setModelData 并相应地调用 TreeItem->setData() 。只是过滤似乎卡在了 TreeItem->data() 的旧值上。请再次注意,这只发生在我玩过 item1 之后。如果我不碰那个项目,我可以正确玩所有其他项目(item2,item3,...)并且它做得很好。
如果有人可以提供帮助,我将非常高兴。
有没有人给我提示,什么可能导致扩展状态的“重置”,即使 expand() 被称为 item1 和 item2 插入并且对 item1 很好用?什么可能导致我的进一步问题?
ExampleDelegate.h
代理模型.h
代理模型.cpp
pyqt4 - 如何使用 QSortFilterProxyModel 在 QTableView 中显示富文本?
介绍:
我有一个有 5 列的表和一个 QLineEdit,它的作用类似于第二列的过滤器。另外,我计划实现一个按钮来隐藏/显示与第一列中的文本匹配的行,另一个按钮来突出显示第二列中的文本。
五列是:
- 只是图标,每个图标对应一个名称。
- 必须表现得像链接的超链接文本(就像 QLabel 中的 HTML 锚)。
- 文件大小以:KB、MB、GB、TB 等表示。必须是超链接,如第二列。
- 整数
- 整数
所有列都必须是可排序的。
在实现 QSortFilterProxyModel 之前,我几乎可以解决所有问题。
这就是我所拥有的:
ResultsStandardItem.py(用于自定义排序的 QStandardItem 的子类):
主要代码:
一切都很好。第一列仅显示图标并且是可排序的,第二列和第三列显示富文本,并且自定义排序按预期工作。唯一应该解决的问题是 QLabel 没有 Qt.TextElideMode,因此,当文本不适合列时,它就会被剪切。
问题:
当我启用 QSortFilterProxyModel 时,QLabels 消失了。所以我必须以正常方式显示文本,并且自定义排序停止工作。
我被困在这里,不知道去哪里。此外,我必须实现突出显示,我不知道如何。所以我需要解决第一个问题,记住下一步是实现突出显示。
我是 Python 和 Qt 的新手,需要有人向我解释正确的方法。最近几天我一直在做这个。我不想选择第一个替代方案然后返回,因为这种方法不允许我实现我需要的其他东西。
提前致谢。
编辑:
我能够使用自定义搜索设置“setSortRole(Qt.UserRole)”。对于每个项目,我将数据设置为将用于排序的相应值。另外,我将“ResultsStandardItem”更改为设置数据而不是 sortKey。
结果标准项目.py:
主要的:
所以,富文本是唯一缺少的东西。
c++ - 如何使用 QSortFilterProxyModel 在 QTreeView 中对系统驱动器进行排序
我有一个QTreeview,我在其中使用QFileSystemModel显示所有系统驱动器。我正在寻找更好的方法,其中QTreeview可以在一个部分显示本地驱动器,在另一个部分显示可移动驱动器,依此类推。基本上对驱动器进行分类。
这是代码:
这基本上为我提供了所有驱动器,如下所示:
使用hideColumn()我隐藏了使用 QTreeView 时显示的所有标题(名称除外),即名称、类型、大小等。
我的要求:
我基本上想要实现的是:
- 本地文件夹
- C:
- 新卷(D:)
- 新卷(E:)
- 可移动驱动器
- SD_卡(F:)
- 超越驱动(G:)
- 本地文件夹
基本上将本地驱动器和外部驱动器分开。我遇到了QSortFilterProxyModel,它看起来像是对驱动器顺序进行排序。但我不知道如何使用它。
- 我想删除 QTreeView 中的标题。由于名称在我的输出中可见,我想隐藏它。如果你能指导我会很有帮助:)
pyqt4 - 如何在pyqt中仅列出QTableView中的可见项目
我有下面的代码来获取 QTableView 的过滤器。但我无法一次过滤多个列。
即,如果过滤列 2row 0 col 0
并尝试过滤列 2,它应该只显示可见的唯一值column 2
(可能它应该只显示)但现在它显示( , , )row 0 col 1
的所有元素column 2
row 0 col 1
row 1 col 1
row 2 col 1
当我运行上面的代码时,我得到以下输出
当我单击第 2 列标题时,显示的过滤器列表如下所示,并且正确显示(该列中的唯一值)...
当我row 0 col 1
在显示的过滤器中选择时,我得到以下过滤列表
但是,当我再次单击第 2 列标题进行过滤时,它会显示与我的第一张图片相同的列表。第 2 列的所有唯一项(来自模型视图)而不是来自 proxyfilter。实际上它应该只显示row 0 col 1
为第 2 列中的唯一项目row 0 col 1
qt - Qt + QSortFilterProxyModel + QStandardItemModel + QTreeView + 删除行时的粉碎
将 QTreeView 与 QStandardItemModel 和 QSortFilterProxyModel 一起使用时出现问题。当我尝试从源模型中删除行时,我的程序崩溃了。在这个地方
堆栈看起来像这样
我正在使用带有 Qt 4.8.3 的 kubuntu 12.10。
我的代码有错误还是Qt的错误?
谢谢。
我尝试使用 4.8.4 构建项目并且它有效。所以我认为,这是 Qt 的错误