为了创建一个Qcombobox,可以在输入时过滤其值列表,我将插槽附加到Qcombobox的EditTextChanged-event上。这样就这样做了:
void SearchableComboBox::slotEditing(QString in_text)
{
this->showPopup();
}
不幸的是,这立即从Qlineedit中窃取了焦点,我不能再输入了。呼叫lendeDit(( -> setFocus((没有什么区别,我不想抓取Kekeyboard((,因为这会造成另一个痛苦的世界。有任何建议吗?
这并不是真正的组合,而更多的是lineedit的完成listView。我完全实现了Ruqola(kde client for Rocket Chat(,您可以在https://lxr.kde.org/source/network/ruqola/src/widgets/common/common/common/completetionlistview.cpp上查看源代码。请注意与焦点代理事物的小舞蹈:
setFocusPolicy(Qt::NoFocus);
textWidget->setFocusPolicy(origPolicy);
setFocusProxy(textWidget);
和用于在正确位置放置完整弹出的长方法slotCompletionAvailable()
...
为此目的使用焦点代理方法。请参阅https://doc.qt.io/qt-5/qwidget.html#setfocusproxy
使用此弹出窗口将其输入转移到LineDit。
在您的情况下,您可以尝试
之类的东西this->setFocusProxy( this->lineEdit() );
,但也许您应该阅读如何使用QCompleter
。这将在打字时提供自动完成,并且可能对您有用。