知识永远是那么多,想到什么就总结什么,今天记录一下关于我对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补全单词
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添加新单词
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中是否包含该文本(忽略大小写),若不包含,则进行添加。
效果如下:
常用的方法
- 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::ModelSorting取值如下:
QCompleter::UnsortedModel 0 该模型是未排序
QCompleter::CaseSensitivelySortedModel 1 该模型是大小写敏感排序
QCompleter::CaseInsensitivelySortedModel 2 的模型是大小写不敏感排序的
注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。