我有一个 QLineEdit
和一个 QListView
。我使用 QStringListModel
用项目填充 QListView
。
如果我在 QLineEdit
中键入内容,如何从 QListView
中查找并选择以我在 中键入的文本开头的项目QLineEdit
?
最佳答案
一般的做法是:
- 连接信号
textChanged
行编辑到您选择的插槽。 - 在此插槽中访问 ListView 的模型(您已将其存储或在 ListView 中使用
model
) - 模型继承自
QAbstractItemModel
它有一个match
搜索功能 ( documentation ) - 调用
match
与Qt::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/