gpt4 book ai didi

c++ - QSortFilterProxyModel 排序基于两个排序角色?

转载 作者:太空狗 更新时间:2023-10-29 20:24:32 25 4
gpt4 key购买 nike

在我的项目中,我在 TreeView 中显示了一个模型。我使用 QSortFilterProxyModel 根据 Qt::UserRole+1 中设置的 ID 对模型进行排序。这将我的列表按“类型”划分(正如您可以通过使用的图标判断的那样):

enter image description here

但是我还希望每个“类型”按字母顺序排序。我最初尝试先按字母顺序排序,然后按类型排序,看看它是否会重新排列以正常工作,但它保持不变。有什么方法可以告诉我的程序使用两个排序角色进行排序并确定哪个“先行”?

proxy->setSortRole(Qt::DisplayRole);
proxy->setSortRole(Qt::UserRole+1);

最佳答案

我需要做的就是创建另一个代理模型的代理模型。第一个代理按字母顺序排序,第二个代理按 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);

比在重新实现的类中编写自定义排序逻辑要简单得多。没有明显的性能影响,所以这就是我正在使用的。

编辑:更改了我的答案...回顾我的旧问题,这不是解决此问题的最佳方法。重新实现该类是更好(和明显)的方法。糟糕。

关于c++ - QSortFilterProxyModel 排序基于两个排序角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27654527/

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