在pyqt QTreeView中选择行和列
Posted
技术标签:
【中文标题】在pyqt QTreeView中选择行和列【英文标题】:Select row and column in pyqt QTreeView 【发布时间】:2015-12-22 16:53:08 【问题描述】:我在 qtreeview 上有一个过滤器,可以重新创建行和列。一旦过滤器被删除所有文本。即过滤器=“”。重新创建 qtreeview。我希望在根据用户过滤结果时的选择重新创建 qtreeview 时预选一行。
我知道我应该使用的方法是: tree.setCurrentIndex(m)
我知道 m 应该是: m = QtCore.QModelIndex()
但是,我似乎无法在 QModelIndex 中设置 setCurrentIndex 满意的行和列。
我通过文字知道所选项目。计划在重新创建 qtreeview 时获取行索引。
qtreeview 的设置如下:
一个 0 1 b 2 3 c 4 5【问题讨论】:
【参考方案1】:列的工作方式与您的预期不同。
在您的示例中,您没有任何列,只有行。
要访问项目a,您应该执行以下操作:
>>> # setting up the model
>>> tree = QtGui.QTreeView()
>>> model = QtGui.QStandardItemModel()
>>> tree.setModel(model)
>>> # accessing data
>>> # To get item "a"
>>> a = tree.model().index(0, 0)
>>> a
<PySide.QtCore.QModelIndex(0,0,0x5805c40,QStandardItemModel(0x5805b30) ) at 0x7f9a81720148>
>>>
>> # to get item "a, 0"
>>> a0 = a.child(0, 0)
>>> a0
<PySide.QtCore.QModelIndex(0,0,0x7f9a88013d30,QStandardItemModel(0x5805b30) ) at 0x7f9a81720348>
请记住,Qt 中的所有内容都遵循父/子关系,包括 QTreeView。 如果你觉得这个模型相当慢,你可以考虑提供一些方法来帮助你(不要向 Qt 寻求帮助,因为 QProxyModel 已被贬低并且不应该使用。
简而言之,项目 a 是模型在 (0, 0) 处的子项。项目 b 位于 (1, 0)
,依此类推。 a 的子项可以使用a.child(row, column)
从a 中引用。子 0 位于 (0, 0)
,子 1 位于 (1, 0)
。
【讨论】:
树没有属性索引。它确实适用于 >>> a = model.index(0,0) 抱歉,我的代码中有错字。它应该是tree.model().index
,而不是tree.model.index
。感谢您发现我的错误:D tree.model()
只是返回对 model
的引用,因为您在同一范围内工作,所以这里与 model.index
相同。以上是关于在pyqt QTreeView中选择行和列的主要内容,如果未能解决你的问题,请参考以下文章