Я отправляю эту ошибку команде Qt: http://bugreports.qt -project.org / browse / QTBUG-13726 и вот описание:
QLineEdit / QTextEdit не получает keyPressEventна N97 у меня есть собственный виджет, который наследуется от QLinedEdit, в этом виджете я переопределяю событие (событие QEvent *), keyPressEvent (событие QKeyEvent *) и keyReleaseEvent (событие QKeyEvent *).Когда я отлаживаю код на устройстве N97, когда я нажимаю любую клавишу на клавиатуре, события доставляются следующим образом:
событие (события QEvent *) вызывается с типом события, установленным в KeyRelease.
вызывается keyReleaseEvent (событие QKeyEvent *).
и никогда не вызывается keyPressEvent !!
, если я нажимаюEnter, BackSpace, клавиши действий, влево, вправо, вниз, вверх, события доставляются следующим образом:
событие (QEvent * events) вызывается с типом события, установленным в KeyPress.
вызывается keyPressEvent (событие QKeyEvent *).
событие (события QEvent *) вызывается с типом события, установленным в KeyRelease.
вызывается keyReleaseEvent (событие QKeyEvent *).
, что правильно.
Как воспроизвести:
#include <QKeyEvent>
#include <QMessageBox>
#include <QLineEdit>
#include <QTextEdit>
#include <QDebug>
class MyWidget : public QLineEdit { Q_OBJECT public: MyWidget(QWidget *parent=0); void keyPressEvent(QKeyEvent * event); void keyReleaseEvent(QKeyEvent * event ); bool event(QEvent *event); };
MyWidget::MyWidget(QWidget *parent)
:QLineEdit(parent)
{ setText("Hola"); }
void MyWidget::keyPressEvent(QKeyEvent *event) { QLineEdit::keyPressEvent(event); }
void MyWidget::keyReleaseEvent(QKeyEvent *event ) { QLineEdit::keyReleaseEvent(event); }
bool MyWidget::event(QEvent *event ) {
switch( event->type() ) { case QEvent::KeyPress: QLineEdit::event(event); break; case QEvent::KeyRelease: QLineEdit::event(event); break; default: QLineEdit::event(event); }
}
Та же проблема возникает, если я наследую от QTextEdit
и у меня есть этот повтор:
Разве это не только из-за методов ввода?
Может кто-нибудь объяснить мне, что он подразумевает под "методами ввода", и как это связано с полученнымсобытия, которые я попытался с setInputMethodHints () и inputMethodEvent () без успеха.