Tem*_*lan 3 sorting qt 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);
Run Code Online (Sandbox Code Playgroud)
现在我想按照这样的距离排序
d->m_vehiclesmodel->setSortRole(Qt::UserRole);
d->m_vehiclesmodel->sort(Car2goVehicle::DistanceRole, Qt::AscendingOrder);
Run Code Online (Sandbox Code Playgroud)
但结果是错误的.有人能告诉我如何排序吗?
谢谢.
结果出了什么问题?在大多数情况下,不使用QSortFilterProxyModel对模型本身进行排序,而是对视图进行排序.以下是文档中的示例:
QTreeView *treeView = new QTreeView;
MyItemModel *sourceModel = new MyItemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(sourceModel);
treeView->setModel(proxyModel);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,您可能会混淆角色和列.您的角色枚举应如下所示:
enum Role {
NameRole=Qt::UserRole,
DistanceRole,
...
};
Run Code Online (Sandbox Code Playgroud)
如果要按距离角色排序,请调用:
model->setSortRole( Car2goVehicle::DistanceRole );
Run Code Online (Sandbox Code Playgroud)
然后,按某个列排序(与角色无关),例如第0列:
model->sort( 0, Qt::AscendingOrder );
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6301 次 |
最近记录: |