Захват событий изменения текста в QComboBox

Я занимаюсь разработкой приложения Qt для Red Hat Linux. Я хочу записать события нажатия клавиши возврата каретки в QComboBox,

Я подключил слот к сигналу editTextChanged() который выдается для каждого нажатия клавиши, но не для клавиши ввода.
Почему так? Есть ли другой способ обнаружить возврат каретки?

2 ответа

Решение

Я предполагаю, что вы написали слот и подключили его к QComboBox::editTextChanged() сигнал.
Этот сигнал срабатывает, когда текст изменяется, и Enter не меняет текст, он принимает его. Если вы хотите получить возврат каретки, есть несколько способов, которыми вы можете следовать.

  1. Подкласс QComboBox,
    Override keyPressEvent(): первый звонок QComboBox::keyPressEvent() и затем проверьте, нажата ли клавиша Enter. Если это так, испустите сигнал.
    Используйте этот подкласс, когда вам нужно. Поиск по продвижению виджетов в QDesigner, если вы не знаете, как.

  2. Реализуйте новый класс, который наследует QObject, В этом классе переопределить eventFilter(): проверьте, является ли событие нажатием клавиши. Если это так, проверьте, является ли это клавишей Enter. Если это так, испустите сигнал.
    Затем создайте экземпляр этого класса и установите его в качестве фильтра событий для вашего QComboBox, Подключите слот к сигналу этого экземпляра, который вы реализовали.

Если это не ясно, я рекомендую прочитать следующие страницы:

Использование пользовательских виджетов с Qt designer

События Qt и фильтры событий

Вы также можете посмотреть в activated( const QString& ) сигнал. Может выдаваться, когда пользователь нажимает ввод.

Другие вопросы по тегам