代码之家  ›  专栏  ›  技术社区  ›  Bhaddiya Tanchangya

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

  •  3
  • Bhaddiya Tanchangya  · 技术社区  · 11 年前

    我有一个 QLineEdit 和一个 QListView .我使用 QStringListModel 以填充 Q列表视图 带项目。

    如果我在 QLine编辑 ,如何从 Q列表视图 以我正在键入的文本开始 QLine编辑 ?

    1 回复  |  直到 11 年前
        1
  •  8
  •   NoDataDumpNoContribution    11 年前

    一般方法是:

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

    给一些更实际的建议。

    要匹配的示例调用:

    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);