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

标签 c++ qt qlineedit qlistview

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

如果我在 QLineEdit 中键入内容,如何从 QListView 中查找并选择以我在 中键入的文本开头的项目QLineEdit?

最佳答案

一般的做法是:

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

给一些更实用的建议。

匹配调用示例:

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

这从头到尾搜索,获取 ListView 的显示文本并将其与搜索文本进行比较,并返回所有找到的匹配项,其中显示的文本以搜索文本开头。

选择调用示例:

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

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

遍历 QModelIndexList 的示例这是QList<QModelIndex>的快捷方式:

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

关于c++ - 如何从 QListView 中搜索和选择项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499676/

相关文章:

c++ - 通过外部 "C"函数与 C++ 对象的接口(interface)

c++ - Qt 图形用户界面动画?

python - 自动聚焦显示删除 QLineEdit 的占位符文本

c++ - 检查第 n 个可变参数模板参数是否属于特定类型

c++ - 为底层容器不存储真实对象的迭代器重载 operator->

c++ - 如何使用 C 编程从 dbus 传递/返回结构?

python - 动态扩展QTreeWidget中列的宽度

c++ - 线程的 worker Qt中的定时器

c++ - 如何在处理 Windows 事件时保持 Qt Widgets 对键盘和鼠标的响应?

python - 如何在PyQt4中使用QInputMask和QDoubleValidator?