qt - 在 C++ Qt 中对 QStandardItemModel 进行排序

标签 qt sorting model qstandarditemmodel

我有一个 QStandardItemModel 类型的模型,它看起来像这样:

          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);

现在我想像这样根据距离排序

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

但是结果是错误的。谁能告诉我如何排序?

谢谢。

最佳答案

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

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

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

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

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

如果你想按距离角色排序,你调用:

model->setSortRole( Car2goVehicle::DistanceRole );

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

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

关于qt - 在 C++ Qt 中对 QStandardItemModel 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5731050/

相关文章:

java - 没有重复项的可排序 Java 集合

c - C中字符串的奇怪排序

javascript - 管理代码中大量硬编码数据的最佳方法?

php - PHP MVC原则

qt - 如何在图形 View 框架中使用 Qt 模型/ View 框架

c++ - QMake 'subdirs' 模板 - 执行目标?

ruby-on-rails - rails : Order with nulls last

qt - 如何在运行时确定 QtWebEngine 在 Qt 5 中使用哪个 Chrome 版本?

Qt Creator Beautifier 和不同的项目

django 通过模型将外键对象列表保存到 m2m 字段并进行排序