在QStandardItemModel中按字母顺序对列进行排序:QSortFilterProxyModel
问题描述:
我试图按字母顺序对QStandardItemModel
的特定列中的项进行排序。 为此,我现在用的是从QSortFilterProxyModel
派生的类,我重新实现lessThan
方法,例如在QStandardItemModel中按字母顺序对列进行排序:QSortFilterProxyModel
bool MyProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
QVariant leftData = sourceModel()->data(left);
QVariant rightData = sourceModel()->data(right);
if(left.column() == 1)
{
return leftData.toString() < rightData.toString();
}
return false;
}
下面是我附上模型代理模型
MyStandardItemModel=new QStandardItemModel();
MyProxy= new MyProxy();
MyProxy->setSourceModel(pModelContacts);
ui.ContactView->setModel(MyProxy);
添加项目后到这里的模型是我做的排序
MyProxy->sort(1);
但是,列不显示排序。有什么建议么?
答
我将取代这一行:
return leftData.toString() < rightData.toString();
以此为每官方custom sort/filter model example:
return QString::localeAwareCompare(leftData.toString(), leftData.rightString()) < 0;
的优点是,它会正确处理字符串用户的区域按文档。
int QString::localeAwareCompare(const QString & other) const
该功能重载localeAwareCompare()。
将此字符串与另一个字符串进行比较,如果此字符串小于,等于或大于另一个字符串,则返回小于,等于或大于零的整数。
比较以区域设置和平台相关的方式执行。使用此函数向用户呈现排序的字符串列表。
与localeAwareCompare相同(* this,other)。
不过,我个人只使用排序顺序枚举来完成这个任务每documentation:
枚举的Qt :: SortOrder的
升序...
Qt :: AscendingOrder 0
这些项目按升序排列,例如与 'AAA' 开始在Latin-1的语言环境
降序 'ZZZ' ...
的Qt :: DescendingOrder 1
中的项目排序降序例如结束与“ZZZ”开始与拉美-1区域设置“AAA”结束
所以,这条线将不每种不超过方法重写,因为默认的排序顺序是升序足够,这似乎是这样你的代码正试图重新实现。
MyProxy->sort(1);
谢谢拉兹洛。我知道我可以简单地做到这一点,但我正在尝试使用FilterProxyModel。 – MistyD
谢谢你做到了。也可以解释为什么我的方法不起作用? – MistyD
看起来像你再次感谢 – MistyD