在QSortFilterProxyModel中,可以使用mapToSource()方法将代理模型中的索引映射到源模型中的索引。因此,如果您想要获取排序后的行号对应的原始行号,可以使用以下代码:
```cpp
int sortedRow = 5; // 假设要获取排序后第5行对应的原始行号
QModelIndex proxyIndex = proxyModel->index(sortedRow, 0); // 获取代理模型中的索引
QModelIndex sourceIndex = proxyModel->mapToSource(proxyIndex); // 将代理模型中的索引映射到源模型中的索引
int sourceRow = sourceIndex.row(); // 获取原始行号
```
这里假设要获取排序后的第5行对应的原始行号。首先,使用index()方法获取代理模型中的索引。然后,使用mapToSource()方法将代理模型中的索引映射到源模型中的索引。最后,使用row()方法获取原始行号。
请注意,如果您在代理模型中使用了自定义的lessThan()函数进行排序,则可能需要在mapToSource()方法中传递排序列的索引,以确保正确地映射索引。例如:
```cpp
int sortedRow = 5;
int sortColumn = 1; // 假设按照第2列排序
QModelIndex proxyIndex = proxyModel->index(sortedRow, sortColumn);
QModelIndex sourceIndex = proxyModel->mapToSource(proxyIndex);
int sourceRow = sourceIndex.row();
```
在这个例子中,我们假设按照第2列进行排序。因此,在获取代理模型中的索引时,我们使用了sortColumn作为第二个参数。然后,在mapToSource()方法中也传递了sortColumn,以确保正确地映射索引。