QCompleter类根据项目模型提供完成项。

头文件:#include <QCommonStyle>

qmake:QT += widgets

继承:QObject

您可以使用QCompleter在任何Qt小部件中提供自动完成功能,例如QLineEdit和QComboBox。 当用户开始输入单词时,QCompleter根据单词列表提出了完成单词的可能方法。 单词列表是作为QAbstractItemModel提供的。 (对于简单的应用程序,单词列表是静态的,您可以将QStringList传递给QCompleter的构造函数。)

1、基础用法

QCompleter通常用于QLineEdit或QComboBox。 例如,以下是如何从QLineEdit中的简单单词列表中提供自动完成:

 QStringList wordList;wordList << "alpha" << "omega" << "omicron" << "zeta";QLineEdit *lineEdit = new QLineEdit(this);QCompleter *completer = new QCompleter(wordList, this);completer->setCaseSensitivity(Qt::CaseInsensitive);lineEdit->setCompleter(completer);

QFileSystemModel可用于提供文件名的自动完成。 例如:

  QCompleter *completer = new QCompleter(this);completer->setModel(new QDirModel(completer));lineEdit->setCompleter(completer);

要设置QCompleter应该运行的模型,请调用setModel()。 默认情况下,QCompleter会尝试将完成前缀(即用户开始键入的单词)与模型中列0中存储的Qt :: EditRole数据进行匹配。 这可以使用setCompletionRole(),setCompletionColumn()和setCaseSensitivity()来更改。

如果模型在用于完成的列和角色上排序,则可以使用QCompleter :: CaseSensitivelySortedModel或QCompleter :: CaseInsensitivelySortedModel作为参数来调用setModelSorting()。 在大型模型中,这可以显着提高性能,因为QCompleter可以使用二分搜索而不是线性搜索。 二进制搜索仅适用于filterMode为Qt :: MatchStartsWith的情况。

该模型可以是列表模型,表格模型或树模型。 有关树模型的完成稍微涉及更多,并在下面的“处理树模型”部分中进行介绍。

completionMode()确定用于向用户提供完成的模式。

2、迭代完成

要检索单个候选字符串,请使用需要完成的文本调用setCompletionPrefix()并调用currentCompletion()。 您可以遍历完成列表,如下所示:

 for (int i = 0; completer->setCurrentRow(i); i++)qDebug() << completer->currentCompletion() << " is match number " << i;

completionCount()返回当前前缀的完成总数。 如果可能,应尽可能避免completionCount(),因为它需要扫描整个模型。

3、完成模型

completionModel()返回一个列表模型,该列表模型包含当前完成前缀的所有可能完成项,并按它们在模型中的显示顺序排列。 此模型可用于在自定义视图中显示当前完成。 调用setCompletionPrefix()会自动刷新完成模型。

4、处理树模型

假设任何项目(或子项目或子子项目)都可以通过指定项目的路径明确表示为字符串,QCompleter可以在树模型中查找完成。 然后完成一次执行一个级别。

我们以用户输入文件系统路径为例。 该模型是一个(分层)QFileSystemModel。 完成发生在路径中的每个元素。 例如,如果当前文本是C:\ Wind,QCompleter可能会建议Windows完成当前路径元素。 同样,如果当前文本是C:\ Windows \ Sy,QCompleter可能会提示系统。

为了完成这种工作,QCompleter需要能够将路径分割成每个级别匹配的字符串列表。 对于C:\ Windows \ Sy,它需要分为“C:”,“Windows”和“Sy”。 splitPath()的默认实现,如果模型是QFileSystemModel,则使用QDir :: separator()分割completionPrefix。

为了提供完整性,QCompleter需要知道索引的路径。 这由pathFromIndex()提供。 pathFromIndex()的默认实现返回列表模型的编辑角色的数据,如果模式是QFileSystemModel,则返回绝对文件路径。

一、成员类型

1、enum QCompleter::CompletionMode

此枚举指定如何完成提供给用户。

内容 描述
QCompleter::PopupCompletion 0 当前完成显示在一个弹出窗口中。
QCompleter::InlineCompletion 2 完成内联显示(作为选定的文本)。
QCompleter::UnfilteredPopupCompletion 1 所有可能的完成都显示在弹出窗口中,最有可能的建议显示为当前。

2、enum QCompleter::ModelSorting

此枚举指定模型中项目的排序方式。

内容 描述
QCompleter::UnsortedModel 0 该模型是未排序的。
QCompleter::CaseSensitivelySortedModel 1 该模型是大小写敏感的。
QCompleter::CaseInsensitivelySortedModel 2 模型不区分大小写。

二、属性

1、caseSensitivity : Qt::CaseSensitivity

该属性保持匹配的大小写敏感性。

默认值是Qt :: CaseSensitive。

访问函数;

Qt::CaseSensitivity
caseSensitivity() const
void
setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)

2、completionColumn : int

该属性拥有完成搜索模型中的列。

如果popup()是QListView,它会自动设置为显示此列。

默认情况下,匹配列为0。

访问函数;

int
completionColumn() const
void
setCompletionColumn(int column)

3、completionMode : CompletionMode

该属性保存了如何完成提供给用户。

默认值是QCompleter :: PopupCompletion。

访问函数;

CompletionMode
completionMode() const
void
setCompletionMode(CompletionMode mode)

4、completionPrefix : QString

该属性包含用于提供完成的完成前缀。

completionModel()被更新以反映可能的前缀匹配列表。

访问函数;

QString
completionPrefix() const
void
setCompletionPrefix(const QString &prefix)

5、completionRole : int

此属性包含要用于查询项目内容以匹配的项目角色。

默认角色是Qt :: EditRole。

访问函数;

int
completionRole() const
void
setCompletionRole(int role)

6、filterMode : Qt::MatchFlags

该属性保存如何执行过滤。

如果filterMode设置为Qt :: MatchStartsWith,则只会显示以类型化字符开头的条目。 Qt :: MatchContains将显示包含类型字符的条目,并且Qt :: MatchEnds以以类型字符结尾的条目显示。

目前,只有这三种模式得以实施。 将filterMode设置为任何其他Qt :: MatchFlag将发出警告,并且不会执行任何操作。

默认模式是Qt :: MatchStartsWith。

这个属性是在Qt 5.2中引入的。

访问函数;

Qt::MatchFlags
filterMode() const
void
setFilterMode(Qt::MatchFlags filterMode)

7、maxVisibleItems : int

该属性在完成者的屏幕上保持允许的最大尺寸,以项目计量。

默认情况下,此属性的值为7。

这个属性是在Qt 4.6中引入的。

访问函数;

int
maxVisibleItems() const
void
setMaxVisibleItems(int maxItems)

8、modelSorting : ModelSorting

该属性保持模型排序的方式。

默认情况下,不提供有关提供完成的模型中项目的顺序的假设。

如果completionColumn()和completionRole()的模型数据按升序排序,则可以将此属性设置为CaseSensitivelySortedModel或CaseInsensitivelySortedModel。 在大型模型中,这会导致显着的性能改进,因为Completer对象可以使用二分搜索算法而不是线性搜索算法。

通过检查模型的内容动态确定模型的排序顺序(即升序或降序)。

注意:当完成者的caseSensitivity与模型在分类时使用的大小写敏感性不同时,上述性能改进不会发生。

访问函数;

ModelSorting
modelSorting() const
void
setModelSorting(ModelSorting sorting

9、wrapAround : bool

此属性在导航项目时包含完成项。

默认值是true。

这个属性是在Qt 4.3中引入的。

访问函数;

bool
wrapAround() const
void
setWrapAround(bool wrap)

三、成员函数

1、QCompleter::QCompleter(QObject *parent = Q_NULLPTR)

用给定的父对象构造一个完成者对象。

2、QCompleter::QCompleter(QAbstractItemModel *model, QObject *parent = Q_NULLPTR)

用给定的父对象构造一个完成对象,该对象提供来自指定模型的完成对象。

3、QCompleter::QCompleter(const QStringList &list, QObject *parent = Q_NULLPTR)

用给定的父对象构造一个QCompleter对象,该对象使用指定的列表作为可能的完成来源。

4、QCompleter::~QCompleter()

销毁完成者对象。

5、[signal] void QCompleter::activated(const QString &text)

当用户激活弹出窗口()中的项目时(通过点击或按下返回键),发送此信号。 该项目的文本给出。

注意:该类中的信号被激活。 要使用函数指针语法连接到此函数,您必须在静态转换中指定信号类型,如下例所示:

 connect(completer, static_cast<void(QCompleter::*)(const QString &)>(&QCompleter::activated),[=](const QString &text){ /* ... */ });

6、[signal] void QCompleter::activated(const QModelIndex &index)

当用户激活popup()中的项目时发送此信号。 (通过点击或按回车)。 给出了completionModel()中的项目索引。

注意:该类中的信号被激活。 要使用函数指针语法连接到此函数,您必须在静态转换中指定信号类型,如下例所示:

  connect(completer, static_cast<void(QCompleter::*)(const QModelIndex &)>(&QCompleter::activated),[=](const QModelIndex &index){ /* ... */ });

7、[slot] void QCompleter::complete(const QRect &rect = QRect())

对于QCompleter :: PopupCompletion和QCompletion :: UnfilteredPopupCompletion模式,调用此函数将显示弹出窗口,显示当前完成情况。 默认情况下,如果未指定rect,则弹出窗口显示在窗口小部件()的底部。 如果指定了rect,则弹出窗口显示在矩形的左边缘上。

对于QCompleter :: InlineCompletion模式,突出显示的()信号在当前完成时触发。

8、int QCompleter::completionCount() const

返回当前前缀的完成数目。 对于包含大量物品的未排序模型,这可能很昂贵。 使用setCurrentRow()和currentCompletion()遍历所有完成。

9、QAbstractItemModel *QCompleter::completionModel() const

返回完成模型。 完成模型是一个只读列表模型,它包含当前完成前缀的所有可能匹配项。 完成模型会自动更新以反映当前完成情况。

注意:这个函数的返回值被定义为一个QAbstractItemModel纯粹为了一般性。 这种实际返回的模型是QAbstractProxyModel子类的一个实例。

10、QString QCompleter::currentCompletion() const

返回当前的完成字符串。 这包括completionPrefix。 与setCurrentRow()一起使用时,可以用它遍历所有匹配。

11、QModelIndex QCompleter::currentIndex() const

返回completionModel()中当前完成的模型索引。

12、int QCompleter::currentRow() const

返回当前行。

13、[virtual protected] bool QCompleter::event(QEvent *ev)

从QObject :: event()重新实现。

14、[virtual protected] bool QCompleter::eventFilter(QObject *o, QEvent *e)

从QObject :: eventFilter()重新实现。

15、[signal] void QCompleter::highlighted(const QString &text)

当用户突出显示弹出窗口()中的项目时发送此信号。 如果使用completionMode()设置为QCompleter :: InlineCompletion来调用complete(),则它也会被发送。 该项目的文本给出。

注意:此类中突出显示的信号超载。 要使用函数指针语法连接到此函数,您必须在静态转换中指定信号类型,如下例所示:

  connect(completer, static_cast<void(QCompleter::*)(const QString &)>(&QCompleter::highlighted),[=](const QString &text){ /* ... */ });

16、[signal] void QCompleter::highlighted(const QModelIndex &index)

当用户突出显示弹出窗口()中的项目时发送此信号。 如果使用completionMode()设置为QCompleter :: InlineCompletion来调用complete(),则它也会被发送。 给出了completionModel()中的项目索引。

注意:此类中突出显示的信号超载。 要使用函数指针语法连接到此函数,您必须在静态转换中指定信号类型,如下例所示:

  connect(completer, static_cast<void(QCompleter::*)(const QModelIndex &)>(&QCompleter::highlighted),[=](const QModelIndex &index){ /* ... */ });

11、QAbstractItemModel *QCompleter::model() const

返回提供完成字符串的模型。

12、[virtual] QString QCompleter::pathFromIndex(const QModelIndex &index) const

返回给定索引的路径。 完成者对象使用它从基础模型中获取完成文本。

默认实现返回列表模型的项目的编辑角色。 如果模型是QFileSystemModel,它将返回绝对文件路径。

13、QAbstractItemView *QCompleter::popup() const

返回用于显示完成的弹出窗口。

14、bool QCompleter::setCurrentRow(int row)

将当前行设置为指定的行。 如果成功则返回true; 否则返回false。

这个函数可以和currentCompletion()一起用来遍历所有可能的完成。

15、void QCompleter::setModel(QAbstractItemModel *model)

设置为模型提供完成的模型。 该模型可以是列表模型或树模型。 如果一个模型已经被预先设置好了,并且它有QCompleter作为它的父项,它将被删除。

为方便起见,如果model是QFileSystemModel,QCompleter会将其caseSensitivity切换为Windows上的Qt :: CaseInsensitive和其他平台上的Qt :: CaseSensitive。

16、void QCompleter::setPopup(QAbstractItemView *popup)

将用于显示完成的弹出窗口设置为弹出窗口。 QCompleter拥有该视图的所有权。

当completionMode()设置为QCompleter :: PopupCompletion或QCompleter :: UnfilteredPopupCompletion时,将自动创建QListView。 默认弹出窗口显示completionColumn()。

确保在修改视图设置之前调用此函数。 这是必需的,因为视图的属性可能需要在视图上设置模型(例如,隐藏视图中的列需要在视图上设置模型)。

17、void QCompleter::setWidget(QWidget *widget)

设置完成提供给窗口小部件的窗口小部件。 当使用QLineEdit :: setCompleter()或QComboBox使用QComboBox :: setCompleter()在QLineEdit上设置QCompleter时,会自动调用此函数。 在为自定义小部件提供完成时,小部件需要显式设置。

18、[virtual] QStringList QCompleter::splitPath(const QString &path) const

将给定的路径分割成用于匹配模型()中的每个级别的字符串。

当sourceModel()是QFileSystemModel时,splitPath()的默认实现基于QDir :: separator()分割文件系统路径。

与列表模型一起使用时,返回列表中的第一项用于匹配。

19、QWidget *QCompleter::widget() const

返回完成者对象提供完成的小部件。

Qt开发:Qt Widgets模块——QCompleter类相关推荐

  1. Qt开发-QT Widgets

    前言 Qt Quick和Qt Widgets这两种技术,官方是强推Qt Quick的. 注意: Qt Widgets使用Python结合PySide2开发的时候,窗口的缩放,内部的组件不会随之缩放,用 ...

  2. [Qt 教程之Widgets模块] —— QGridLayout栅格布局

    Qt系列教程总目录 文章目录 一.QGridLayout布局规则 二.创建QGridLayout 三.成员函数 1. 控件间距 2. 可拉伸控件(弹簧) 3. 最小行高/列宽 4. 行数和列数 5. ...

  3. Qt开发-QT Quick

    前言 QT Quick和Qt widgets这两种技术,官方是强推QT Quick的. QT Quick中布局一般有如下四种方式, 绝对坐标:x.y.z.width.height.top.left 锚 ...

  4. [Qt 教程之Widgets模块] —— QCheckBox复选框

    Qt系列教程总目录 文章目录 零.简介 一.创建QCheckBox 二.成员函数与信号 三.示例 1. 设置复选框是否可为三种状态 2. 设置复选框状态 3. 通过复选框状态作相应操作 4. 通过多个 ...

  5. [Qt 教程之Widgets模块] —— QRadioButton单选框

    Qt系列教程总目录 文章目录 0. QRadioButton简介 1. 创建QRadioButton 2. 修改QRadioButton文本 3. QRadioButton分组 4. QRadioBu ...

  6. Qt开发-MVD架构

    Qt开发-MVD架构 模型/视图类 MVC是一种我们熟知的架构模式,它的全称是 Model View Controller.MVC具体的概念及应用,网上已经非常非常详尽了,这里就不赘述了,今天要了解的 ...

  7. Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113773009 长期持续带来更多项目与技术分 ...

  8. Qt开发:Qt Widgets模块——简介

    Qt Widgets模块提供了一组UI元素来创建经典的桌面风格的用户界面. 请参阅用户界面概述以获取有关使用Widgets 的更多信息. 一.概述 要包含模块类的定义,请使用以下指令: #includ ...

  9. 二选一的时候到了,Qt Widgets 还是 Qt Quick ? 致Qt开发伙伴

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Qt QWidgets 和 Qt Quick 各自有什么特性.特点? 1.Qt QWidgets 2.Qt Qui ...

最新文章

  1. C# 实现单线程线程池并调用实例
  2. 深入跨域问题(2) - 利用 CORS 解决跨域
  3. Matplotlib 2016-04-15
  4. Mysql游标循环遍历
  5. 数据结构:下列选项中,不可能是快速排序第2趟排序结果的是(2019年全国试题10)
  6. 算法python知乎_20个算法李小文知乎文章与Github代码汇总
  7. java新的日期_java8你应该了解的新特性(新时间与日期API)
  8. 拓端tecdat|视频:R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格
  9. 渗透测试-postmessage xss
  10. Mifare 1卡(M1卡、IC卡)读写操作及工作原理整理
  11. 计算机屏幕刷新频率,屏幕刷新率多少合适,教您电脑屏幕刷新率多少合适
  12. Java中Synchronized用法详解
  13. Bert:Pre-training of Deep Bidirectional Transformers forLanguage Understanding
  14. Android异种机型系统适配:application定义的app名字和安装到手机后桌面显示app名字不一致
  15. Feign - Error while extracting response for type [class java.lang.String]
  16. .NET Interop 互操作 COM+
  17. mysql 16g内存够用么_日常办公多大的内存够用 电脑内存8g和16g的区别
  18. 一、浙江专升本高等数学考点-函数
  19. 计算机网络基础选择题
  20. 踩坑记--Your connection to this site is not secure

热门文章

  1. 什么是自然语言处理?
  2. HDU5298立体几何
  3. 如何用微信收集证据?
  4. Springboot 打包神器Maven 保姆级教程
  5. 2021年中国礼物经济行业发展现状:市场规模不断增长,线上购买占比大[图]
  6. 论文:DensePose: Dense Human Pose Estimation In The Wild 阅读笔记
  7. linux ping ttl,ping 命令----根据TTL判断对方是什么操作系统
  8. 什么是B-树和B+树?
  9. 多项logistic回归系数解释_多元回归系数:我们都解释错了?
  10. do sb suggest to_suggest sb to do和suggest doing有什么区别吗