【问题标题】:Sort QTableView QDateTime Column instead of string sort排序 QTableView QDateTime 列而不是字符串排序
【发布时间】:2018-02-20 10:07:08
【问题描述】:

在我的 QtableView 中有四列。第 0 列是 dd-MM-yyyy 格式的日期。其他三列包含字符串,因此对它们来说排序不是问题(可以使用QSortFilterProxyModel 类完成),但对于 col 0,我希望从右到左排序(升序和降序)。

【问题讨论】:

  • 我不明白你下面这句话的意思:但是对于col 0我想从右到左排序,还必须提供Minimal, Complete, and Verifiable example
  • 可能是他要求将日期排序为字符串
  • 是的。对于 col 0 数据采用 dd-MM-yyyy 格式,这意味着我的数据是 (20-07-2017,12-09-2017) 所以当我按升序排列它们时,我得到结果 (12-09-2017, 20-07-2017) 而不是 (20-07-2017,12-09-2017)。据我了解,这是因为 col 0 中的字符串是从左到右排列的,如果我们可以从右到左排列,那么我们将得到正确的结果。
  • 据我所知,您想要对 QDateTime 字段进行排序,而不是对 col 0 的文本字符串进行排序。对吗?
  • @saeed 你是对的。这是 dd-MM-yyyy 格式的 QDate 字段

标签: python python-2.7 qt pyqt pyqt4


【解决方案1】:

这是 customSortingModel

的简单示例
self.tableView = QtGui.TableView(self)
self.table_model = QtGui.QStandardItemModel(0, 0)
self.proxyModel = CustomSortingModel(self)

self.proxyModel.setSourceModel(self.table_model)
self.tableView.setModel(self.proxyModel)

class CustomSortingModel(QtGui.QSortFilterProxyModel):
    def lessThan(self,left,right):

        col = left.column()

        dataleft = left.data()
        dataright = right.data()

        if col == 2:
            dataleft = float(dataleft)
            dataright = float(dataright)
        elif col == 3:
            dataleft = QtCore.QDateTime.fromString(dataleft, "d/M/yy").addYears(100)
            dataright = QtCore.QDateTime.fromString(dataright, "d/M/yy").addYears(100)

        return dataleft < dataright

【讨论】:

  • addYears(100) 是多少?
  • .addYears(100) 是额外的,用于确保 QDateTime 类型
  • @saeed。这很愚蠢 - 除了QDate,它不能返回任何东西。
猜你喜欢
  • 2017-03-11
  • 2011-06-05
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多