【发布时间】:2018-08-09 11:52:10
【问题描述】:
我有一个字符串匹配函数可用于搜索比QString::contains() 更高级的名称(例如,当您搜索“mueller”时,它将匹配“Müller”)。
我想使用这个函数在QComboBox 中进行搜索。默认完成几乎可以满足我的需要:如果我这样做
combobox->setEditable(true);
combobox->setInsertPolicy(QComboBox::NoInsert);
combobox->completer()->setCompletionMode(QCompleter::PopupCompletion);
然后在QComboBox 的行编辑中输入一些文本,弹出窗口会弹出,只显示已输入的条目。
这就是我想要的,但我希望QCompleter 使用我的搜索功能而不是显然在这里使用的QString::startsWith() 来评估匹配项(并且将模式设置为Qt::MatchContains 更好但仍然不够)。
有没有办法自定义完成者的搜索功能?
感谢大家的帮助!
【问题讨论】:
-
创建自定义模型并使用
QSortProxyModel实现您的搜索 -
免责声明:未经测试。您不能将
QComboBox::setCompleter与此示例中的自定义完成程序一起使用(doc.qt.io/qt-5/qcompleter.html#basic-usage)吗?看起来您可以使用搜索功能,用所有建议填充QStringList,然后将其设置为您的QComboBox。 -
据我了解,如果 QCombobox 中的项目是:{“alpha”、“omega”、“omicron”、“zeta”},并且您在QComboBox 你应该显示“omega”和“omicron”,对吗?
-
是的,但这可以通过默认实现/行为来实现。我的匹配函数还处理变音符号、德语变音符号等,并且也匹配 e。 G。带有搜索词“doe john”的“John Doe”。因此,我不能使用默认的匹配方式,而需要使用我的自定义函数。
-
@Azeem:可能的建议不是问题,因为所有可能的值都已添加到
QComboBox。问题是如何选择与输入字符串匹配的可能值,因为QCompleter提供的匹配功能不够(实际上,我检查了搜索词和可能完成的多个不同版本)。
标签: c++ qt qt5 qcombobox qcompleter