QCompleter在编辑框、下拉框中的使用:提示候选词

一、QCompleter作用

有时我们想实现这样的效果:在一个编辑框(QLineEdit)内输入文字后,在编辑框下方列出包含已输入文字的候选词,达到动态模糊搜索的目的。或者在使用下拉框(QCombobox)时,选项太多,找到自己要选择的选项太耗时,输入关键字,可以筛选项目,加快速度。

二、用法

QStringList strlst={"张三","李四","王五","四哥"};
QCompleter *comp = new QCompleter(strlst);
lineedit->setCompleter(comp);

在QCombobox中的使用也是一样,不过首先要设置combobox的可编辑选项为true
combobox->setEditable(true);

此时我们如果输入“张”,会在下方直接出现“张三”选项,可以直接选择,QCompleter默认的展示方式为下拉显示,可以通过setCompletionMode(QCompleter::CompletionMode mode)设置。

QCompleter::CompletionMode模式有三种:
QCompleter::PopupCompletion(默认):下拉显示。
QCompleter::InlineCompletion:不显示下拉选项,直接把最接近的一项填入。
QCompleter::UnfilteredPopupCompletion:下拉显示,并把最接近的一项填入。

现在还有一个问题,那就是模糊匹配都是前缀匹配,也就是当我输入"四"时,候选列表中只会出现"四哥",而不会出现"李四"。

匹配策略可以在setFilterMode(Qt::MatchFlags)中设置,设为Qt::MatchContains即可实现整个字符串包含的匹配,类似sql中的 like ‘%xxx%’

你可能感兴趣的:(qt)