Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: VAP от Сентябрь 13, 2008, 14:55



Название: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: 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);


Название: Re: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: ритт от Сентябрь 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.


Название: Re: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: VAP от Сентябрь 13, 2008, 15:48
Константин, если я Вас правильно понял, необходимо еще обрабатывать сигнал строки ввода
QLineEdit::returnPressed();, что есть имитация нажатия на Enter?


Название: Re: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: ритт от Сентябрь 13, 2008, 16:24
похоже, неправильно...
из кода выше можно сделать вывод, что треуется лишь отлов Энтера
я предлагаю приконнектиться к returnPressed лайнэдита вместо ивентФильтра.


Название: Re: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: VAP от Сентябрь 13, 2008, 16:28
Сделал вот так и все заработало, спасибо Константину:
От фильтра пришлось отказаться.

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

void Terminal::eventFilter()
{
   transmitData();
}


Название: Re: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: ритт от Сентябрь 13, 2008, 16:47
сделай transmitData слотом и просто connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(transmitData()));


Название: Re: Не работает событие клавиатуры Key_Enter в фильтре событий
Отправлено: Red Devil от Сентябрь 15, 2008, 15:16
Key_Enter - это Enter, который на циферблате.
А enter который основной - Key_Return.