Russian Qt Forum
Сентябрь 30, 2024, 02:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает событие клавиатуры Key_Enter в фильтре событий  (Прочитано 6277 раз)
VAP
Гость
« : Сентябрь 13, 2008, 14:55 »

Здравствуйте!
Не могу разобраться почему событие нажатия на клавишу Enter в приведенном коде игнорируется, хотя если вместо Key_Enter подставить например Key_Tab, то все работает без проблем?

Код:
if (target == lineEdit) {
        if (event->type() == QEvent::KeyPress) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
            if (keyEvent->key() == Qt::Key_Enter) {
                transmitData();
                //event->accept();
                return true;       
            }
} else {
            return false;
        }
    }
    return QWidget::eventFilter(target, event);
« Последнее редактирование: Сентябрь 14, 2008, 12:29 от pastor » Записан
ритт
Гость
« Ответ #1 : Сентябрь 13, 2008, 15:22 »

Код:
   } else {
            return false;
        }
это, конечно, нечто...
а в остальном код рабочий - проблема не здесь

Код:
if (keyEvent->key() == Qt::Key_Enter) {
                transmitData();
велосипед?
Цитировать
void QLineEdit::returnPressed ()   [signal]
This signal is emitted when the Return or Enter key is pressed. Note that if there is a validator() or inputMask() set on the line edit, the returnPressed() signal will only be emitted if the input follows the inputMask() and the validator() returns QValidator::Acceptable.
« Последнее редактирование: Сентябрь 13, 2008, 16:22 от Константин » Записан
VAP
Гость
« Ответ #2 : Сентябрь 13, 2008, 15:48 »

Константин, если я Вас правильно понял, необходимо еще обрабатывать сигнал строки ввода
QLineEdit::returnPressed();, что есть имитация нажатия на Enter?
Записан
ритт
Гость
« Ответ #3 : Сентябрь 13, 2008, 16:24 »

похоже, неправильно...
из кода выше можно сделать вывод, что треуется лишь отлов Энтера
я предлагаю приконнектиться к returnPressed лайнэдита вместо ивентФильтра.
Записан
VAP
Гость
« Ответ #4 : Сентябрь 13, 2008, 16:28 »

Сделал вот так и все заработало, спасибо Константину:
От фильтра пришлось отказаться.

Код:
connect(lineEdit, SIGNAL(returnPressed()), SLOT(eventFilter()));

void Terminal::eventFilter()
{
   transmitData();
}
« Последнее редактирование: Сентябрь 14, 2008, 12:30 от pastor » Записан
ритт
Гость
« Ответ #5 : Сентябрь 13, 2008, 16:47 »

сделай transmitData слотом и просто connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(transmitData()));
Записан
Red Devil
Гость
« Ответ #6 : Сентябрь 15, 2008, 15:16 »

Key_Enter - это Enter, который на циферблате.
А enter который основной - Key_Return.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.15 секунд. Запросов: 21.