下拉框有时候选项特别多,找到自己想要的选项会特别麻烦,这时候需要手动输入关键字去过滤不匹配的选项,方便用户选择。
1、实现代码
QComboBox *comboBox = new QComboBox;
QStandardItemModel *model =new QStandardItemModel(this);
QStringList items = getItems();
for (int i = 0; i < items.size(); i++)
{
QStandardItem *item=new QStandardItem(items[i]);
model->appendRow(item);
}
comboBox->setModel(model);
QCompleter *completer=new QCompleter(comboBox);
// 设置过滤条件不区分大小写
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setModel(model);
completer->setCompletionColumn(comboBox->modelColumn());
// 只显示符合条件的选项
completer->setCompletionMode(QCompleter::PopupCompletion);
// 设置下拉列表最多同时显示10个选项,多的折叠起来
completer->setMaxVisibleItems(10);
comboBox->setCompleter(completer);
2、运行效果
其中completer->setCompletionMode(QCompleter::PopupCompletion);还可以设置其他两种模式
UnfilteredPopupCompletion:下拉框也会显示不符合的选项,匹配的选项一定再当前显示范围内,效果如下:
InlineCompletion:不会弹出下拉列表,直接补全输入框,如下图所示: