QCompleter类提供基于项目模型的补全。
你可以使用QCompleter在任何Qt部件中提供自动补全,如QLineEdit和QComboBox。当用户开始输入一个单词时,QCompleter会根据单词列表建议完成这个单词的可能方法。单词列表作为QAbstractItemModel提供。(对于单词列表是静态的简单应用程序,可以将QStringList传递给QCompleter的构造函数。)
例子1:补全内容
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);
运行截图:
例子2:补全文件路径
QCompleter *completer = new QCompleter(this);
QDirModel *dirModel = new QDirModel();
completer->setModel(dirModel);
ui->lineEdit->setCompleter(completer);
例子3:添加新内容
word_list<<"Java"<<"C++"<<"C#"<<"PHP"<<"Perl"<<"Python"<<"Delphi"<<"Ruby";
QCompleter* completer = new QCompleter();
string_list_model = new QStringListModel();
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setModel(string_list_model);
ui->lineEdit->setCompleter(completer);
connect(ui->lineEdit, &QLineEdit::editingFinished, this, &MainWindow::editComplete);
//槽函数
void MainWindow::editComplete()
{
QString text = ui->lineEdit->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);
}
}
}
运行截图如下:之前输入了1425424,然后输入1就有如下提示。
qt creator搜索即可看到官方示例