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

时间:2015-02-13 12:29:49

标签: c++ qt qlineedit qlistview

我有QLineEditQListView。我使用QStringListModel填充QListView项目。

如果我在QLineEdit中输入内容,我如何找到并选择QListView中以我在QLineEdit中输入的文字开头的项目?

1 个答案:

答案 0 :(得分:5)

一般方法是:

  • 将线路编辑的信号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); 的快捷方式:

{{1}}