在QAbstractTableModel中对货币格式化的数字进行排序

时间:2013-11-21 16:31:14

标签: qt sorting qabstracttablemodel qsortfilterproxymodel

我有一个实现data()的QAbstractTableModel子类,有些列是int和double。我正在使用QLocale :: toCurrencyString()和QLocale :: toString()来根据区域设置转换这些数字,以添加格式化字符,例如'$'和','。由于结果是字符串,因此列现在以字符串形式排序值,而不是int或double形式。

我正在使用QSortFilterProxyModel根据列进行排序。但它只是以字符串形式获取数据,并基于此进行排序。也许我不应该在data()中格式化整数和双精度数?我找不到另一个格式化这些值的地方。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你应该让你的QAbstractTableModel实现返回Qt :: DisplayRole的字符串,以及Qt :: EditRole的原始double。

然后在QSortFilterProxyModel上调用setSortRole(Qt::EditRole)

这可能不是最简单的方法,但我相信它最符合Qt的设计理念。