在C ++ Qt中对QStandardItemModel进行排序 [英] Sort QStandardItemModel in c++ Qt

查看:1544
本文介绍了在C ++ Qt中对QStandardItemModel进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个QStandardItemModel类型的模型,如下所示:

I have a model of type QStandardItemModel which looks like this:

          QHash<int, QByteArray> roleNames;
          roleNames[Car2goVehicle::NameRole] =  "plate_number";
          roleNames[Car2goVehicle::DescriptionRole] = "address";
          roleNames[Car2goVehicle::FuelRole] = "fuel";
          roleNames[Car2goVehicle::InteriorRole] = "interior";
          roleNames[Car2goVehicle::ExteriorRole] = "exterior";
          roleNames[Car2goVehicle::VinRole] = "vin";
          roleNames[Car2goVehicle::LatRole] = "lat";
          roleNames[Car2goVehicle::LonRole] = "lon";
          roleNames[Car2goVehicle::DistanceRole] = "distance";
          d->m_vehiclesmodel = new RoleItemModel(roleNames);

现在我要按照这样的距离进行排序

and now I want to sort according to distance like this

           d->m_vehiclesmodel->setSortRole(Qt::UserRole);
           d->m_vehiclesmodel->sort(Car2goVehicle::DistanceRole, Qt::AscendingOrder);

但是结果是错误的.有人可以告诉我如何排序吗?

But the result is wrong. Can somebody tell me how to sort ?

谢谢.

推荐答案

结果出了什么问题? 在大多数情况下,不是对模型本身进行排序,而是使用 QSortFilterProxyModel 对视图进行排序>.这是文档中的示例:

What's wrong with the result? In most cases, one doesn't sort the model itself, but the view, using a QSortFilterProxyModel. Here's the example from the documentation:

QTreeView *treeView = new QTreeView;
MyItemModel *sourceModel = new MyItemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);

proxyModel->setSourceModel(sourceModel);
treeView->setModel(proxyModel);

在上面的示例中,您可能会混淆角色和列.您的角色枚举应如下所示:

In your example above, you might mix up roles and columns. Your Role enum should look like this:

enum Role {
    NameRole=Qt::UserRole,
    DistanceRole,
    ...
};

如果要按距离角色排序,请致电:

If you want to sort by distance role, you call:

model->setSortRole( Car2goVehicle::DistanceRole );

然后,按某个列(与角色无关)进行排序,例如列0:

Then, sort by some column (which has nothing to do with the role), E.g. column 0:

model->sort( 0, Qt::AscendingOrder );

这篇关于在C ++ Qt中对QStandardItemModel进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆