
Если элемент из m_box выбирается методом сопоставления поиска с помощью клавиш вверх и вниз и клавиши Enter, курсор также не будет отображаться в m_box, как показано в примере ниже.

Однако, если совпадающие элементы отображаются через при совпадении поиска и выборе элемента из раскрывающегося списка с помощью мыши курсор будет отображаться в m_box, как показано в примере ниже.

Я надеюсь на единообразное поведение всех трех методов: до тех пор, пока выбранный элемент существует в элементах-кандидатах m_box, курсор не должен отображаться в m_box, если только не щелкнуть мышью по m_box, после чего курсор должен появиться. Вот минимальный воспроизводимый пример:
#include
#include
#include
#include
#include
#include
#include
#include
class CustomDialog : public QDialog
{
Q_OBJECT
public:
CustomDialog(QWidget* parent = nullptr) : QDialog(parent)
{
QStringList items;
items addItems(items);
QCompleter* completer = new QCompleter(items, m_box);
completer->setFilterMode(Qt::MatchContains);
m_box->setCompleter(completer);
m_lst = new QListWidget(this);
m_lst->addItems(items);
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(m_box);
layout->addWidget(m_lst);
connect(m_box, SIGNAL(activated(int)), this, SLOT(onSelChangedBox(int)));
}
public slots:
void onSelChangedBox(int iSel);
private:
QComboBox* m_box;
QListWidget* m_lst;
};
void CustomDialog::onSelChangedBox(int iSel)
{
qDebug() setFocus();
}
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
CustomDialog dlg;
dlg.setFixedSize(300, 200);
dlg.show();
return a.exec();
}
#include "main.moc"
Подробнее здесь: https://stackoverflow.com/questions/790 ... ox-using-d
Мобильная версия