如何完全迭代QStandardItemModel?
问题描述:
我有一个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,然后停止。
答
我希望它可以帮助你:
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);