2024-04-19 13:59:10 发布
网友
我有一个QStandardItemModel被导入到QTableView中。我的模型中有一列包含日期,这些日期具有用户友好的显示数据和计算机友好的用户数据。例如,一个QStandardItem可能显示一个类似22 Nov 2018的字符串,但是userdata看起来像324586(从纪元开始的秒数)。不过,当我对列进行排序时,它当然是按displayData排序的。如何强制表按userData排序?在
22 Nov 2018
324586
必须使用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_())
尽管我更喜欢直接保存QDateTime并使用委托以您想要的格式显示数据。在
必须使用setSortRole():
尽管我更喜欢直接保存QDateTime并使用委托以您想要的格式显示数据。在
^{pr2}$相关问题 更多 >
编程相关推荐