gpt4 book ai didi

qt - QSortFilterProxyModel : retrieve the item or index of the original model

转载 作者:行者123 更新时间:2023-12-03 23:22:58 26 4
gpt4 key购买 nike

我碰巧有一个 ComboBox 和一个 QSortFilterProxyModel 附加到它,按字母顺序排列项目。

原始模型(QComboBox)例如:

“C”,
“一种”,
“丁”,
“乙”

排序模型(QSortFilterProxyModel)变为:

“一种”,
"乙",
“C”,
“丁”

如果我现在在排序的组合框中选择“D”,信号 QComboBox::currentIndexChanged(int) 给我索引 = 3,但我想检索相对于原始模型的索引,因此索引 = 2。

另一方面,我也想“原始模型”-> setCurrentIndex(idx)。但是,如果我定义 idx=2,则在组合框中突出显示的行显示“C”,因为 View 已排序。

我该如何解决这个问题?

最佳答案

首先,您需要获取组合框显示的模型的索引。使用 QAbstractItemModel::index要做到这一点。组合框给出的“索引”是行。

要从代理索引映射到源索引,以及从源索引映射到代理索引,请使用 QSortFilterProxyModel::mapToSourcemapFromSource , 分别。

View 对代理的索引进行操作,因此您从 View 中获得的任何索引都必须使用 mapToSource 映射到源模型。 .反之亦然,如果您对源模型中的索引进行操作,并希望获取 View 上的索引,请使用 mapFromSource .

例如。:

connect(myComboBox, &QComboBox::currentIndexChanged, [=](int row){
auto proxy = static_cast<QAbstractProxyModel*>(myComboBox->model());
auto const proxyIndex = proxy->index(row, 0);
auto source = proxy->sourceModel();
auto const sourceIndex = proxy->mapToSource(proxyIndex);
...
});

关于qt - QSortFilterProxyModel : retrieve the item or index of the original model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41041929/

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