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. Сделайте одну для фильтрации по стране (ее источником будет ваша основная модель), а другую - для фильтрации по городам (ее источником будет модель-посредник для стран).