Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

QComboBox выпадающий список перехватывает фокус

Дата публикации: 02-07-2026 17:12:55



Приветствую.
Задача такая: нужно сделать комбобокс с полем ввода, чтобы список обновлялся в зависимости от того, что ввели.
Не могу понять, как сделать, чтобы список не перехватывал фокус. На данный момент получается так: изменяем текст, список обновляется, но фокус на списке, и дальше изменять текст не получается, нужно кликнуть мышкой, чтобы список закрылся и стало активным поле ввода. Подскажите как это обойти?
Минимальный пример:
#include <QApplication>
#include <QMainWindow>
#include <QComboBox>
#include <QVBoxLayout>
#include <QStringList>
#include <QLineEdit>


class MainWindow : public QMainWindow
{
QComboBox* cb;
QStringList ports = { "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", "/dev/ttyM1", "/dev/ttyM2" };
public:
MainWindow(QWidget* parent = nullptr) : QMainWindow(parent)
{
QWidget* central = new QWidget(this);
QVBoxLayout* layout = new QVBoxLayout(central);
cb = new QComboBox(this);
cb->addItems(ports);
cb->setEditable(true);
connect(cb, &QComboBox::editTextChanged, this, &MainWindow::textEdit);
layout->addWidget(cb);
setCentralWidget(central);
}
public slots:
void textEdit(const QString& text)
{
cb->blockSignals(true);
cb->clear();
if (text.isEmpty())
cb->addItems(ports);
else
{
QStringList filter;
for (const QString& port : ports)
{
if (port.contains(text, Qt::CaseInsensitive))
filter.append(port);
}
cb->addItems(filter);
}
cb->setEditText(text);
cb->showPopup();
cb->lineEdit()->setFocus();
cb->blockSignals(false);
}
};

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}



 c++, qt

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Переменная WINEDLLPATH=&#171;&#187;0602-07-2026
2Телеграм и ширина баблов-3503-07-2026
3Obstacles to writing, 12/18/25-2318-12-2025
4Robots txt0514-03-2026
5Black Screen UI Bug While Editing Sources [Properties window]0503-07-2026
6Debian: как разделить две сетки между приложениями?0503-07-2026
7AGPL+{FDL,CC*}0504-07-2026
8Debian Woody на qemu - не работает горячая смена дисков-5313-06-2026
9Re: Установка win 3.1 на qemu0727-06-2026
10Component is not Showing Above Footer After Changing Component ID in the functions.php File0228-06-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 7. Источник: www.linux.org.ru.