2015-10-14 67 views
4

我有一个QStandardItemModel,它显示在q QTreeView中。工作正常。如何完全迭代QStandardItemModel?

要突出显示相关行,我想突出显示其中的一些:因此,我有一个QStringList,其中要突出显示QStandItem *的名称。

QStringList namesToBeHighlighted = getNames(); 

QModelIndex in = myModel->index(0, 0); 

if (in.isValid()) { 

    for (int curIndex = 0; curIndex < myModel->rowCount(in); ++curIndex) { 

     QModelIndex si = myModel->index(curIndex, 0, in); 
     QStandardItem *curItem = myModel->itemFromIndex(si); 

     if (curItem) { 
      QString curItemName = curItem->text(); 

      if (namesToBeHighlighted.contains(curItem->text())) { 
       curItem->setFont(highlightFont); 
      } 
      else curItem->setFont(unHighlightFont); 
     } 
    } 
} 

我模式已以下结构:
LEVEL_1
+ - > Level_11
+ - > Level_12
+ - > Level_13
LEVEL_2
+ - > Level_21
+ - > Level_22
+ - > Level_23
...

这里,它迭代低谷级别11,12和13,然后停止。

回答

6

我希望它可以帮助你:

void forEach(QAbstractItemModel* model, QModelIndex parent = QModelIndex()) { 
    for(int r = 0; r < model->rowCount(parent); ++r) { 
     QModelIndex index = model->index(r, 0, parent); 
     QVariant name = model->data(index); 
     qDebug() << name; 
     // here is your applicable code 
     if(model->hasChildren(index)) { 
      forEach(model, index); 
     } 
    } 
} 

QStandardItemModel model; 
    QStandardItem* parentItem = model.invisibleRootItem(); 
    for (int i = 0; i < 4; ++i) { 
     QStandardItem *item = new QStandardItem(QString("item %0").arg(i)); 
     for (int j = 0; j < 5; ++j) { 
      item->appendRow(new QStandardItem(QString("item %0%1").arg(i).arg(j))); 
     } 
     parentItem->appendRow(item); 
     parentItem = item; 
    } 
forEach(&model);