Qcombobox :: ShowPopup()从其Qlineedit中窃取了焦点

QComboBox::showPopup() steals focus from its QLineEdit

本文关键字:焦点 从其 ShowPopup Qcombobox Qlineedit      更新时间:2023-10-16

为了创建一个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。这将在打字时提供自动完成,并且可能对您有用。