简体   繁体   English

从QTreeView中的QModelIndex获取平行索引

[英]Get flat row index from QModelIndex in QTreeView

I have a hierarchical Qtreeview structure view and model containing several rows with children in the following manner: 我有一个分层的Qtreeview结构视图和模型,包含几个带子项的行,方式如下:

                                Index(index.row())        Desired flat index

- Row1                           0                               0
  - child1                       0                               1               
  - child2                       1                               2               
  - child3                       2                               3               
    - child11                    0                               4                                        
    - child22                    1                               5                  
      - child 221                0                               6                     
    - child33                    2                               7                  
      - child 31                 0                               8                     
      - child 32                 1                               9                    
  - child4                       3                               10                                      
    - child41                    0                               11                  
    - child42                    1                               12                  
- Row2                           2                               13               
  - child1                       0                               14               
    - child 11                   0                               15                   
    - child 12                   1                               16                  
      - child 121                0                               17                     
  - child2                       1                               18               
  - child3                       2                               19                   
  - child4                       3                               20               
    - child41                    0                               21                  
    - child42                    1                               22                  

Every index's index.row() will give row number with respect to the parent under which it is there. 每个索引的index.row()都会给出相对于它所在的父级的行号。 Is there any quick method to find the desired flat index shown above in the figure in Qt itself? 是否有任何快速方法可以在Qt本身的图中找到所需的平坦指数? The above sample shows a very simple hierarchy. 以上示例显示了非常简单的层次结构。 It is very complex ie has several hierarchies and number of rows. 它非常复杂,即具有多个层次结构和行数。

You can use the following code to get flat index that corresponds to the given model index: 您可以使用以下代码获取与给定模型索引对应的平面索引:

// 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);
}

Hopefully it's clear how it calculates the index. 希望很清楚它是如何计算指数的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM