QStandardItemModel получить модель ребенка

Я новичок в программировании на Qt, и у меня небольшая проблема. На самом деле у меня большой QStandardItemModel на котором мне нужно найти некоторые конкретные элементы с ключевыми словами. Идея состоит в том, чтобы дать пользователю возможность ввести два ввода: одно для страны, а другое для города. После того, как страна найдена, нужно искать город только в соответствующих странах. Но основной код, он продолжает искать по всей модели дерева.

Чтобы получить соответствующие страны, я делаю:

foundCountriesList = TreeModel->findItems(countryKeyword, 
    Qt::MatchStartsWith | Qt::MatchFixedString | Qt::MatchRecursive, 0); 

Тогда мне нужно найти city Ключевое слово только внутри соответствующей страны:

if (!foundCountriesList.isEmpty())
{
    foreach(QStandardItem* item, foundCountriesList)
    {
        foundCitiesList = item->child(0,0)->Model()->findItems(cityKeyword, 
            Qt::MatchStartsWith | Qt::MatchFixedString | 
            Qt::MatchRecursive, 0);
    }
}

Но он продолжает искать city в целом TreeModel потому что всякий раз, когда я делаю TreeModel->Item(0,0)->child(0,0)->Model()Я всегда получаю TreeModel назад.

Может ли кто-нибудь дать мне несколько советов?
Заранее спасибо!

2 ответа

Я бы решил это следующим образом:

QStandardItem *findCityItem(const QString &city, const QString &country)
{
  auto cityItems = TreeModel->findItems(city,
                                        Qt::MatchRecursive | Qt::MatchWrap | Qt::MatchExactly, 0);
  for (auto cityItem : cityItems)
  {
    auto parent = item->parent();
    if (parent && (parent->data().toString() == country))
    {
      return item;
    }
  }
  return nullptr;
}

то есть поиск названия города и, если города найдены, проверьте, к какой стране они принадлежат.

Поскольку вы уже просматриваете все элементы в нужной стране, вы можете отфильтровать город самостоятельно, изучив значения элементов.

Вы также можете попробовать использовать QSortFilterProxyModel. Сделайте одну для фильтрации по стране (ее источником будет ваша основная модель), а другую - для фильтрации по городам (ее источником будет модель-посредник для стран).

Другие вопросы по тегам