我有一个分层的Qtreeview结构视图和模型,其中包含以以下方式包含几行带有子项的行:
Proxy
每个索引的index.row()将给出相对于其所在父级的行号。是否有任何快速方法可以在Qt本身中找到所需的平面指数?上面的示例显示了一个非常简单的层次结构。它非常复杂,即具有多个层次结构和行数。
答案 0 :(得分:1)
您可以使用以下代码来获取与给定模型索引相对应的平面索引:
// Returns the total number of children (and grand children).
static int childCount(const QModelIndex &index)
{
auto model = index.model();
int count = model->rowCount(index);
for (int r = 0; r < count; ++r) {
count += childCount(index.child(r, 0));
}
return count;
}
// Returns the flat index for the given model index (hierarchical).
static int flatIndex(const QModelIndex &index)
{
if (!index.isValid()) {
return -1;
}
int result = index.row() + 1;
auto parent = index.parent();
// Get the number of all items above.
for (int r = 0; r < index.row(); ++r) {
result += childCount(index.model()->index(r, 0, parent));
}
return result + flatIndex(parent);
}
希望很清楚如何计算索引。