QTableView按用户对列数据排序

2024-04-19 13:59:10 发布

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

我有一个QStandardItemModel被导入到QTableView中。我的模型中有一列包含日期,这些日期具有用户友好的显示数据和计算机友好的用户数据。例如,一个QStandardItem可能显示一个类似22 Nov 2018的字符串,但是userdata看起来像324586(从纪元开始的秒数)。不过,当我对列进行排序时,它当然是按displayData排序的。如何强制表按userData排序?在


Tags: 数据字符串用户模型排序计算机novuserdata
1条回答
网友
1楼 · 发布于 2024-04-19 13:59:10

必须使用setSortRole()

from PyQt5 import QtCore, QtGui, QtWidgets
import random

DATECOLUMN = 1

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self._tableView = QtWidgets.QTableView()
        self.setCentralWidget(self._tableView)

        self._model = QtGui.QStandardItemModel(10, 4) 
        self._tableView.setModel(self._model)

        now_second = QtCore.QDateTime.currentDateTime().toSecsSinceEpoch()
        for i in range(self._model.rowCount()):
            for j in range(self._model.columnCount()):
                if j == DATECOLUMN:
                    t = QtCore.QDateTime.fromSecsSinceEpoch(random.randint(0, now_second))
                    text = t.toString("dd MMM yyyy")
                    it = QtGui.QStandardItem(text)
                    it.setData(t.toSecsSinceEpoch(), QtCore.Qt.UserRole)
                else:
                    it = QtGui.QStandardItem("{}-{}".format(i, j))
                self._model.setItem(i, j, it)

        self._model.setSortRole(QtCore.Qt.UserRole)
        self._model.sort(DATECOLUMN, QtCore.Qt.AscendingOrder)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

enter image description here

尽管我更喜欢直接保存QDateTime并使用委托以您想要的格式显示数据。在

^{pr2}$

enter image description here

相关问题 更多 >