2015-02-13 3 views

ответ

5

Общий подход:

  • Connect сигнал textChanged от линии правки слота вашего выбора.
  • В этом доступе слота модель в виде списка (или вы его хранили или model на список)
  • Модели унаследованный от QAbstractItemModel который имеет match функцию для поиска (documentation)
  • вызовов match с Qt::MatchStartsWith в качестве флага соответствия и соответствующей роли (роль отображения), и вы получите список индексов модели
  • Результатом может быть ноль, один или несколько индексов.
  • Получить модель выбора из любого представления списка модели (selectionModel) и вызвать select с каждым индексом в списке индексов в результате вызова match (некоторые из них могут быть уже выбраны)

Чтобы дать более практичный совет.

Пример вызова в соответствии:

model->match(model->index(0, 0), Qt::DisplayRole, QVariant::fromValue(search_text), -1, Qt::MatchStartsWith); 

Этот поиск от начала до конца, принимая отображаемый текст в виде списка и сравнивает его с текстом поиска и возвращает все найденные матчи, где начинается отображается текст с текстом поиска.

Пример вызова для выбора:

model->selectionModel()->select(index, QItemSelectionModel::Select); 

Какой будет выбрать индекс (с different flags вы можете отменить или переключить выбор).

Пример итерации по QModelIndexList, который является сокращением для QList<QModelIndex>:

foreach(QModelIndex modelIndex, modelIndexList) 
    selectionModel->select(modelIndex, QItemSelectionModel::Select);