Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 是否按数据值对QTreeWidgetItem排序?_Sorting_Pyqt_Qtreewidget_Qtreewidgetitem - Fatal编程技术网

Sorting 是否按数据值对QTreeWidgetItem排序?

Sorting 是否按数据值对QTreeWidgetItem排序?,sorting,pyqt,qtreewidget,qtreewidgetitem,Sorting,Pyqt,Qtreewidget,Qtreewidgetitem,是否可以按QTreeWidgetItem的数据列对PyQt QTreeWidget进行排序 例如,我在QTreeWidget中显示了一个我想在磁盘上按大小排序的目录列表,但我没有显示结果(以字节为单位),而是使用一种方法将目录大小转换为兆字节/千兆字节,但仍然能够按实际值对项目进行排序,我已将其存储在QTreeWidgetItem的数据槽中。是,我经常遇到这种情况。我一直认为,从理论上讲,做一些事情,比如: item = QTreeWidgetItem() item.setData(0, Qt.

是否可以按QTreeWidgetItem的数据列对PyQt QTreeWidget进行排序


例如,我在QTreeWidget中显示了一个我想在磁盘上按大小排序的目录列表,但我没有显示结果(以字节为单位),而是使用一种方法将目录大小转换为兆字节/千兆字节,但仍然能够按实际值对项目进行排序,我已将其存储在QTreeWidgetItem的数据槽中。

是,我经常遇到这种情况。我一直认为,从理论上讲,做一些事情,比如:

item = QTreeWidgetItem()
item.setData(0, Qt.EditRole, QVariant(1024))
item.setData(0, Qt.DisplayRole, '1 Kb')
应该行得通……不幸的是不行。使其工作的唯一真正方法是对QTreeWidgetItem进行子类化,并以自己的方式存储排序信息,或者使用Qt.UserRole vs.EditRole或DisplayRole:

class MyTreeWidgetItem(QTreeWidgetItem):
    def __lt__( self, other ):
        if ( not isinstance(other, MyTreeWidgetItem) ):
            return super(MyTreeWidgetItem, self).__lt__(other)

        tree = self.treeWidget()
        if ( not tree ):
            column = 0
        else:
            column = tree.sortColumn()

        return self.sortData(column) < other.sortData(column)

    def __init__( self, *args ):
        super(MyTreeWidgetItem, self).__init__(*args)
        self._sortData = {}

    def sortData( self, column ):
        return self._sortData.get(column, self.text(column))

    def setSortData( self, column, data ):
        self._sortData[column] = data

是的,我经常碰到这个。我一直认为,从理论上讲,做一些事情,比如:

item = QTreeWidgetItem()
item.setData(0, Qt.EditRole, QVariant(1024))
item.setData(0, Qt.DisplayRole, '1 Kb')
应该行得通……不幸的是不行。使其工作的唯一真正方法是对QTreeWidgetItem进行子类化,并以自己的方式存储排序信息,或者使用Qt.UserRole vs.EditRole或DisplayRole:

class MyTreeWidgetItem(QTreeWidgetItem):
    def __lt__( self, other ):
        if ( not isinstance(other, MyTreeWidgetItem) ):
            return super(MyTreeWidgetItem, self).__lt__(other)

        tree = self.treeWidget()
        if ( not tree ):
            column = 0
        else:
            column = tree.sortColumn()

        return self.sortData(column) < other.sortData(column)

    def __init__( self, *args ):
        super(MyTreeWidgetItem, self).__init__(*args)
        self._sortData = {}

    def sortData( self, column ):
        return self._sortData.get(column, self.text(column))

    def setSortData( self, column, data ):
        self._sortData[column] = data