如何从QListView中搜索和选择项目?

Bha*_*gya 3 c++ qt qlistview qlineedit

我有一个QLineEdit和一个QListView.我QStringListModel用来填充QListView项目.

如果我在中输入内容QLineEdit,我如何找到并选择一个项目,该项目QListView以我在中键入的文本开头QLineEdit

Tri*_*ion 6

一般方法是:

  • textChanged行编辑的信号连接到您选择的插槽.
  • 在此插槽中访问列表视图的模型(要么存储它,要么model在列表视图中)
  • 继承了该模型QAbstractItemModel具有match搜索功能(文档)
  • matchwith Qt::MatchStartsWith作为匹配标志和相应的角色(显示角色)调用,您将获得模型索引列表
  • 结果可以是零个,一个或多个索引.
  • 从模型(selectionModel)的列表视图中获取选择模型,并使用调用select产生的索引列表中的每个索引进行调用match(某些可能已被选中)

提供一些更实用的建议.

匹配示例调用:

model->match(model->index(0, 0), Qt::DisplayRole, QVariant::fromValue(search_text), -1, Qt::MatchStartsWith);
Run Code Online (Sandbox Code Playgroud)

这将从开始到结束进行搜索,获取列表视图的显示文本并将其与搜索文本进行比较,并返回所有找到的匹配项,其中显示的文本以搜索文本开头.

示例调用选择:

model->selectionModel()->select(index, QItemSelectionModel::Select);
Run Code Online (Sandbox Code Playgroud)

这将选择索引(使用不同的标志,您可以取消选择或切换选择).

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

foreach(QModelIndex modelIndex, modelIndexList)
  selectionModel->select(modelIndex, QItemSelectionModel::Select);
Run Code Online (Sandbox Code Playgroud)