PyQt QSortProxyModel是否需要显示列才能进行排序?

2024-06-09 09:07:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个树视图,其中底层节点具有许多属性(~9),并且一直在研究示例附带的PyQt5示例。然而,这些例子和搜索结果并没有回答我下面的问题。首先,我的目标是:

我只想通过一列节点名给出一个树视图,并希望能够对不同的属性/列进行排序。例如,试图使用

        myView.sortByColumn(8, QtCore.Qt.AscendingOrder)

按我的模型的第8个属性排序

def data(self, index, role):
[...]
        elif index.column() == 8:

            return node.status
[...]

但是,仅在视图中显示第一列(节点名称)时

def columnCount(self, parent):
    """
    in: QModelIndex
    out: int
    """
    N = 1

    return N

在我的视图中未看到排序结果

将columnCount更改为9后,视图按第8列排序,以换取我不想在视图中看到的8列

您是否必须显示列才能按其排序?如果没有,你能给出一个解释或小例子来说明如何做到这一点吗


Tags: self视图示例目标indexreturn属性节点
1条回答
网友
1楼 · 发布于 2024-06-09 09:07:43

在尝试了一些东西之后,我刚刚解决了这个问题:

事实证明,您必须确保模型的columnCount N足够大s.t。代理模型可以使用j列进行排序!即N>;j

自定义的列计数(!)然后可以使用代理模型显示所需的列数

class MySortFilterProxyModel(QtCore.QSortFilterProxyModel):
    def __init__(self, parent=None):
        super(MySortFilterProxyModel, self).__init__(parent)

    def columnCount(self, parent=None):
        return 1

class MyTreeModel(QtCore.QAbstractItemModel):

    def __init__(self, root, parent=None):
        """
        in: Node, Qobject
        """

        super(MyTreeModel, self).__init__(parent)

        self._root = root
        self.parent = parent


    def columnCount(self, parent):
        """
        in: QModelIndex
        out: int
        """
        return 9

        [...]

一旦您记住代理模型“查看”了模型,即只知道模型公开的列,那么这种偏离就有意义了

希望这可以为其他人节省几分钟的尝试和错误

相关问题 更多 >