mrg*_*g95 4 c++ qt qsortfilterproxymodel
在我的项目中,我有一个以树视图显示的模型。我使用 QSortFilterProxyModel 根据 Qt::UserRole+1 中设置的 ID 对模型进行排序。这将我的列表按“类型”划分(正如您可以通过使用的图标看出的):

不过,我也希望每个“类型”按字母顺序排序。我最初尝试先按字母顺序对事物进行排序,然后按类型对其进行排序,看看它是否会重新排列事物以使其正常工作,但它保持不变。有什么方法可以告诉我的程序使用两个排序角色进行排序并确定哪个“先进行”?
proxy->setSortRole(Qt::DisplayRole);
proxy->setSortRole(Qt::UserRole+1);
Run Code Online (Sandbox Code Playgroud)
我所需要做的就是创建另一个代理模型的代理模型。第一个代理按字母顺序排序,第二个代理按 UserRole+1 对第一个代理排序。
QSortFilterProxyModel* proxy = new QSortFilterProxyModel(ui->treeNBT);
proxy->setSourceModel(model);
proxy->setDynamicSortFilter(false);
proxy->sort(0, Qt::AscendingOrder);
proxy->setSortCaseSensitivity(Qt::CaseInsensitive);
proxy->setSortRole(Qt::DisplayRole);
QSortFilterProxyModel* proxy2 = new QSortFilterProxyModel(ui->treeNBT);
proxy2->setSourceModel(proxy);
proxy2->setDynamicSortFilter(false);
proxy2->sort(0, Qt::AscendingOrder);
proxy2->setSortRole(Qt::UserRole+1);
ui->treeNBT->setModel(proxy2);
Run Code Online (Sandbox Code Playgroud)
比在重新实现的类中编写自定义排序逻辑简单得多。没有明显的性能影响,所以这就是我正在使用的。
编辑:改变了我的答案......回顾我的旧问题,这不是解决这个问题的最佳方法。重新实现类是更好(也是显而易见)的方法。哎呀。
| 归档时间: |
|
| 查看次数: |
6076 次 |
| 最近记录: |