在pyqt QTreeView中选择行和列

时间:2015-12-22 16:53:09

标签: python pyqt pyqt4

我在qtreeview上有一个过滤器,用于重新创建行和列。删除所有文本的过滤器后。即filter =""。 qtreeview被重新创建。我希望在用户过滤结果时根据选择重新创建qtreeview时预选一行。

我知道我应该使用的方法是: tree.setCurrentIndex(M)

我知道应该是: m = QtCore.QModelIndex()

但是,我似乎无法在QModelIndex中设置setCurrentIndex满意的行和列。

我按文字知道所选项目。计划在重新创建qtreeview时获取行索引。

qtreeview的设置如下:

  • 一个
    • 0
    • 1
  • b
    • 2
    • 3
  • Ç
    • 4
    • 5

1 个答案:

答案 0 :(得分:3)

列不会按照您的预期工作。

在您的示例中,您没有任何列,只有行。

要访问 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)