【问题标题】:Select row and column in pyqt QTreeView在pyqt QTreeView中选择行和列
【发布时间】:2023-04-03 19:56:01
【问题描述】:

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

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

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

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

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

qtreeview 的设置如下:

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

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案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 相同。
    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 2017-03-29
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2014-03-26
    • 2013-01-01
    相关资源
    最近更新 更多