Как полностью перебрать QStandardItemModel?

У меня есть QStandardItemModel, которую я отображаю в q QTreeView. Работает отлично.

Чтобы выделить соответствующие строки, я хочу выделить некоторые из них: поэтому у меня есть 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);
        }
    }
}

Моя модель имеет следующую структуру:
Уровень_1
+--> Уровень_11
+--> Уровень_12
+--> Уровень_13
Уровень_2
+--> Уровень_21
+ --> Уровень_22
+--> Уровень_23
...

Здесь он проходит через уровни 11, 12 и 13, а затем останавливается.


person Ralf Wickum    schedule 14.10.2015    source источник


Ответы (1)


Я надеюсь, что это поможет вам:

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);
person AnatolyS    schedule 14.10.2015