我送這個bug Qt的團隊: http://bugreports.qt-project.org/browse/QTBUG-13726 和這裏的描述:輸入法是否阻止QLineEdit接收KeyPressEvent?
QLineEdit的/的QTextEdit沒有收到keyPressEvent上N97 我從QLinedEdit繼承的自定義窗口小部件,在這個widget我重寫事件(QEvent *事件),keyPressEvent(QKeyEvent *事件)和keyReleaseEvent(QKeyEvent *事件)。
事件(QEvent的*事件)被調用設置爲KeyRelease事件類型:當我調試N97設備上的代碼,當我按下鍵盤上的任意鍵如下事件被交付。
keyReleaseEvent(QKeyEvent * event)被調用。
和keyPressEvent從未被稱爲!
,如果我按Enter鍵,Backspace鍵,動作鍵,左,右,下,上,該事件被傳遞如下:
事件(QEvent的*事件)被調用的事件類型設置爲按鍵響應。
keyPressEvent(QKeyEvent * event)被調用。
事件(QEvent的*事件)被調用設置爲KeyRelease事件類型。
keyReleaseEvent(QKeyEvent *事件)被調用。
這是正確的。
如何重現:如果我在的QTextEdit
繼承和我有這個錄像顯示
#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); }
}
同樣的問題:
是不是隻是因爲輸入法?
任何人都可以向我解釋他是什麼意思的「輸入法」,以及它如何與接收到的事件相關,我試着用setInputMethodHints()和inputMethodEvent()沒有成功。
我的聲望得分會超過你:P – 2011-08-16 21:46:19