从QTreeView中的QModelIndex获取平面行索引

时间:2018-12-07 10:04:02

标签: c++ qt

我有一个分层的Qtreeview结构视图和模型,其中包含以以下方式包含几行带有子项的行:

Proxy

每个索引的index.row()将给出相对于其所在父级的行号。是否有任何快速方法可以在Qt本身中找到所需的平面指数?上面的示例显示了一个非常简单的层次结构。它非常复杂,即具有多个层次结构和行数。

1 个答案:

答案 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);
}

希望很清楚如何计算索引。