如何从 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);
我有一个 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);