如何从 QListView 中搜索 select 项?

How to search for and select items from a QListView?

我有一个 QLineEdit 和一个 QListView。我使用 QStringListModel 用项目填充 QListView

如果我在 QLineEdit 中键入内容,我如何找到 select QListView 中以我在 [=11] 中键入的文本开头的项目=]?

一般做法是:

  • 将线路编辑的信号 textChanged 连接到您选择的插槽。
  • 在此插槽中访问列表视图的模型(您已将其存储或在列表视图中使用 model
  • 该模型继承自 QAbstractItemModel,具有 match 搜索功能 (documentation)
  • 使用 Qt::MatchStartsWith 作为匹配标志和适当的角色(显示角色)调用 match,您将获得模型索引列表
  • 结果可以是零个、一个或多个索引。
  • 从模型的列表视图 (selectionModel) 中获取 selection 模型,并使用调用 select 产生的索引列表中的每个索引调用 select =16=](有些可能已经 selected)

给一些比较实用的建议。

匹配调用示例:

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

这从头搜索到尾,获取列表视图的显示文本并将其与搜索文本进行比较,returns所有找到显示文本以搜索文本开头的匹配项。

对 select 的调用示例:

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

这将 select 索引(使用 different flags 您可以取消 select 或切换 selection)。

迭代 QModelIndexList 的示例,它是 QList<QModelIndex> 的快捷方式:

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