Вход на сайт

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

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

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



Основное содержимое страницы с новостью.

Приветствую. Задача такая: нужно сделать комбобокс с полем ввода, чтобы список обновлялся в зависимости от того, что ввели. Не могу понять, как сделать, чтобы список не перехватывал фокус. На данный момент получается так: изменяем текст, список обновляется, но фокус на списке, и дальше изменять текст не получается, нужно кликнуть мышкой, чтобы список закрылся и стало активным поле ввода. Подскажите как это обойти? Минимальный пример:

#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();
}

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

#Наименование новостиТональностьИнформативностьДата публикации
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.