QTableView 排序日期和值
Posted
技术标签:
【中文标题】QTableView 排序日期和值【英文标题】:QTableView Sorting dates and values 【发布时间】:2014-05-04 21:44:55 【问题描述】:我有一个包含一些常规文本、一些数字和日期的表格,文本排序很好,但数字和日期不是,这是因为给定的值是字符串,而不是 int 或 QDate 对象,我必须实现什么才能获得实际的 int 和实际的 QDate 项才能正确排序?
是在 ItemModel 中还是在 TableView 中?我必须继承它吗?
【问题讨论】:
您可以为此使用QSortFilterProxyModel。或者您可以尝试将类型更改为 int 和 QDate,它可能会自行正确排序。 我明白了,在你提供的链接中说我可以“在你的模型中实现 PySide.QtGui.QSortFilterProxyModel.sort(),或者使用 PySide.QtGui.QSortFilterProxyModel 来包装你的模型”如何我做第一个? 我认为这行不通。对于自定义排序,您必须为代理实现lessThan
函数。我没有看到文档中提到的作为模型的虚拟方法。
【参考方案1】:
感谢 M4rtini,我可以实现正确的功能。对于任何与之斗争的人。这是代码。
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.QDate.fromString(dataleft, "d/M/yy").addYears(100)
dataright = QtCore.QDate.fromString(dataright, "d/M/yy").addYears(100)
return dataleft < dataright
【讨论】:
以上是关于QTableView 排序日期和值的主要内容,如果未能解决你的问题,请参考以下文章
QTableView“ResizeToContents”列太宽,启用排序
模型排序时更新 QTableView/QHeaderView 中的排序指示符