HowTo находят Подэлемент в классе QAbstractItemModel и QTreeView?

Вопрос: как найти sub объект в a QTreeView загруженный QAbstractItemModel модель с model->match() метод?

Проблема: model->match() не может найти sub объекты, wtf?!

Вот пример:

alt text

Как Вы видите из изображения, я пытаюсь расшириться Layouts объект sub с этим кодом:

void Dialog::restoreState(void)
{
    // get list
    QSettings settings("settings.ini", QSettings::IniFormat);
    settings.beginGroup("MainWindow");
    QStringList List = settings.value("ExpandedItems").toStringList();
    settings.endGroup();

    foreach (QString item, List)
    {
        if (item.contains('|'))
            item = item.split('|').last();
        // search `item` text in model
        QModelIndexList Items = model->match(model->index(0, 0), Qt::DisplayRole, QVariant::fromValue(item));
        if (!Items.isEmpty())
        {
            // Information: with this code, expands ONLY first level in QTreeView
            view->setExpanded(Items.first(), true);
        }
    }
}

Где settings.ini файл содержит:

[MainWindow]
ExpandedItems=Using Containers, Connection Editing Mode, Form Editing Mode, Form Editing Mode|Layouts

PS: корневые объекты успешно подробно останавливаются, запускаются!

13
задан Glorfindel 3 August 2019 в 03:09
поделиться

1 ответ

Вот решение:

QModelIndexList Items = model->match(
            model->index(0, 0),
            Qt::DisplayRole,
            QVariant::fromValue(item),
            2, // look *
            Qt::MatchRecursive); // look *
  • * Без этого аргумента функция match () ищет только 1 уровень
22
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: