我们有以下代码来通过一个模型检索type类型的数据,该模型是一个自定义代理模型。这是下一个QSortFilterProxyModel所需要的,以便对元素的筛选做出决定。代码实际上是由两个函数组合而成的:在项目中,我们通常有一些与ROW相关的任意索引,并使用它从另一个包含TYPE数据的预定义列中检索数据。
QModelIndex index = sourceModel()->index(row, COLUMN1, sourceParent); /* sourceParent is always'invalid' - retrieving data from top-level items*/
ModelIndex sibling = index.sibling(row, COLUMN2);
return sibling.data(Qt::EditRole).value<TYPE>();
这在Qt4上运行得很好,但当移到Qt5时,兄弟姐妹变得"无效"。我想知道发生了什么,考虑到数据实际上就在那里,我看到了,通过将代码更改为以下
return sourceModel()->index(sourceRow, COLUMN2, sourceParent).data(Qt::EditRole).value<TYPE>();
-运行良好
查看sibling()的实现,我无法判断是什么导致它在您的情况下返回无效索引。与Qt4实现相比,它可能围绕着IndexMap
的使用。
但是,既然sourceModel()->index(sourceRow, COLUMN2, sourceParent)
似乎已经是您真正想要做的事情,为什么不简单地使用您的解决方案呢?