このバグをQtチームに送信します:http: //bugreports.qt-project.org/browse/QTBUG-13726 そしてここに説明があります:
QLineEdit /QTextEditはN97でkeyPressEventを受信しませんQLinedEditから継承するカスタムウィジェットがあります。このウィジェットでは、event(QEvent * event)、keyPressEvent(QKeyEvent * event)、およびkeyReleaseEvent(QKeyEvent * event)をオーバーライドします。N97デバイスでコードをデバッグしたときに、キーパッドのいずれかのキーを押すと、イベントは次のように配信されます。
event(QEvent * events)は、イベントタイプをKeyReleaseに設定して呼び出されます。
keyReleaseEvent(QKeyEvent * event)が呼び出されます。
そしてkeyPressEventは決して呼び出されませんでした!!
Enterキー、BackSpaceキー、アクションキー、左、右、下、上を押すと、イベントは次のように配信されます。
event(QEvent * events)は、イベントタイプをKeyPressに設定して呼び出されます。
keyPressEvent(QKeyEvent * event)が呼び出されます。
event(QEvent * events)は、イベントタイプをKeyReleaseに設定して呼び出されます。
keyReleaseEvent(QKeyEvent * event)が呼び出されます。
どちらが正しい。
再現方法:
#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()を試しましたが成功しませんでした。