引言
在搜索栏种输入要搜索的文本,就会出现相关联的文本提示,这是可以通过鼠标选中要搜索的文本,或者通过上下键选中要搜索的文本。
效果
效果图如下所示:
实现
下面是相关的代码实现,读者只需参考,理解其含义,然后自己结合自己的程序来编写便可。
void LayoutListWidget::initCombox()
{ui->comboBox->setView(new QListView());ui->comboBox->setLineEdit(ui->lineEdit);ui->comboBox->setEditable(true);ui->comboBox->setMaxVisibleItems(6);ui->comboBox->lineEdit()->setPlaceholderText(QStringLiteral("请输入搜索的场景名称"));
}void LayoutListWidget::onUpdateSearchedList()
{ui->comboBox->clear();ui->comboBox->addItems(m_layoutName);ui->comboBox->lineEdit()->clear();//清空默认显示在行编辑器中的文本,使其显示提示信息QCompleter *pCompleter = new QCompleter(m_layoutName, this);ui->lineEdit->setCompleter(pCompleter);pCompleter->setCaseSensitivity(Qt::CaseInsensitive);ui->comboBox->setCompleter(pCompleter);
}
如果被检索的库不变更,在程序开始的时候便已经加载了下拉列表种的字符串列表,则上述的第二个函数可以放在第一个函数种去实现。在搜索栏实现的过程中,创建了一个行编辑器和一个下拉列表,将行编辑器设置到下拉列表中,并向下拉列表中添加供检索的所有的字符串,设置行编辑器和下拉列表的补全器,这样在输入的文字包含在被检索库中时就会出现提示栏,提示可供选则的字符串。但这个自动补全器只能在文本字符串按照顺序检索,不能跳跃式检索。也就是假如搜索的文本是突然,在搜索栏中输入突,就会在列表提示突然,当然是搜索库中已经含有突然,没有就不会有任何提示栏出现,当输入然的时候,不会出现补全的文本提示框。
搜索出来后,在搜索栏显示选中的文本,这时点击搜索按钮,会执行搜索到该字符串后要执行的程序。