Qt开发:Qt Widgets模块——QCompleter类

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::PopupCompletion0当前完成显示在一个弹出窗口中。
QCompleter::InlineCompletion2完成内联显示(作为选定的文本)。
QCompleter::UnfilteredPopupCompletion1所有可能的完成都显示在弹出窗口中,最有可能的建议显示为当前。

2、enum QCompleter::ModelSorting

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

内容描述
QCompleter::UnsortedModel0该模型是未排序的。
QCompleter::CaseSensitivelySortedModel1该模型是大小写敏感的。
QCompleter::CaseInsensitivelySortedModel2模型不区分大小写。


二、属性

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

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

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用介绍 9-2 StringBuffer和String Builder 9-3 Rintime的使用 9-4 日期简介 9-5 java程序国际化的实现 9-6 Random和Math 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分 10-8 自定义异常 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现 11-4 List接口实现 11-5 Map接口 11-6 Collections 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合的同步问题 12-6 用Timer调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注型 16-3 自定义标注型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值