QCompleter自动补全

知识永远是那么多,想到什么就总结什么,今天记录一下关于我对QComplete的一些小见解。

官方文档中叙述如下:
      可以在任何Qt的窗口小部件中使用QCompleter提供自动补全功能,如:QLineEdit和QComboBox。当用户开始输入一个字符,QCompleter根据单词列表提示完成单词。这个单词列表是作为一个QAbstractItemModel被提供的(对于简单的应用,这里所说的列表是静态的,可以传递一个QStringList来构造QCompleter)。

QCompleter补全文件路径
QLineEdit *search_line_edit = new QLineEdit();
QCompleter *completer = new QCompleter();
QDirModel *dir_model = new QDirModel();
completer->setModel(dir_model);
search_line_edit->setCompleter(completer);
效果如下:
QCompleter自动补全
QCompleter自动补全

QCompleter补全单词
QStringList word_list;
word_list<<"Java"<<"C++"<<"C#"<<"PHP"<<"Perl"<<"Python"<<"Delphi"<<"Ruby";
QLineEdit *search_line_edit = new QLineEdit();
QCompleter *completer = new QCompleter(word_list, this);
completer->setCaseSensitivity(Qt::CaseInsensitive);
search_line_edit->setCompleter(completer);
效果如下:
QCompleter自动补全
QCompleter自动补全

QCompleter添加新单词
search_line_edit = new QLineEdit();
completer = new QCompleter();
string_list_model = new QStringListModel();
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setModel(string_list_model);
search_line_edit->setCompleter(completer);
connect(search_line_edit, &QLineEdit::editingFinished, this, &MainWidget::editComplete);
槽函数如下:
void MainWidget::editComplete()
{
QString text = search_line_edit->text();
if(QString::compare(text, QString("")) != 0)
{
bool is_contains = word_list.contains(text, Qt::CaseInsensitive);
if(!is_contains)
{
word_list<<text;
string_list_model->setStringList(word_list);
}
}
}
      初始word_list中无任何单词,当输入框编辑完成之后,首先判断是否为空,若非空,则检测word_list中是否包含该文本(忽略大小写),若不包含,则进行添加。
效果如下:
QCompleter自动补全

常用的方法
  • void setMaxVisibleItems(int maxItems)
设置最大显示数目
  • void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
设置是否区分大小写
Qt::CaseSensitivity取值如下:
      Qt::CaseInsensitive      0      大小写不敏感
      Qt::CaseSensitive         1      大小写敏感
默认为:Qt::CaseSensitive
  • void setModelSorting(ModelSorting sorting)
设置 排序方式
QCompleter::ModelSorting取值如下:
QCompleter::UnsortedModel                            0      该模型是未排序
QCompleter::CaseSensitivelySortedMod el         1      该模型是大小写敏感排序
QCompleter::CaseInsensitivelySortedM odel      2      的模型是大小写不敏感排序的

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页