gpt4 book ai didi

c++ - 在 QStandardItemModel : QSortFilterProxyModel 中按字母顺序对列进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:43 24 4
gpt4 key购买 nike

我正在尝试按字母顺序对 QStandardItemModel 的特定列中的项目进行排序。为此,我使用派生自 QSortFilterProxyModel 的类,并且我正在重新实现 lessThan 方法

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

This function overloads localeAwareCompare().

Compares this string with the other string and returns an integer less than, equal to, or greater than zero if this string is less than, equal to, or greater than the other string.

The comparison is performed in a locale- and also platform-dependent manner. Use this function to present sorted lists of strings to the user.

Same as localeAwareCompare(*this, other).

但是,我个人会根据 documentation 对这项任务使用排序顺序枚举。 :

enum Qt::SortOrder

升序...

Qt::AscendingOrder 0

The items are sorted ascending e.g. starts with 'AAA' ends with 'ZZZ' in Latin-1 locales

降序...

Qt::DescendingOrder 1

The items are sorted descending e.g. starts with 'ZZZ' ends with 'AAA' in Latin-1 locales

所以,如果没有 lessThan 方法覆盖,这一行就足够了,因为默认排序顺序是升序的,这似乎是您的代码试图重新实现的情况。

MyProxy->sort(1);

关于c++ - 在 QStandardItemModel : QSortFilterProxyModel 中按字母顺序对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com