2010-09-24 111 views
1

我送這個bug Qt的團隊: http://bugreports.qt-project.org/browse/QTBUG-13726 和這裏的描述:輸入法是否阻止QLineEdit接收KeyPressEvent?

QLineEdit的/的QTextEdit沒有收到keyPressEvent上N97 我從QLinedEdit繼承的自定義窗口小部件,在這個widget我重寫事件(QEvent *事件),keyPressEvent(QKeyEvent *事件)和keyReleaseEvent(QKeyEvent *事件)。

  1. 事件(QEvent的*事件)被調用設置爲KeyRelease事件類型:當我調試N97設備上的代碼,當我按下鍵盤上的任意鍵如下事件被交付。

  2. keyReleaseEvent(QKeyEvent * event)被調用。

和keyPressEvent從未被稱爲!

,如果我按Enter鍵,Backspace鍵,動作鍵,左,右,下,上,該事件被傳遞如下:

  1. 事件(QEvent的*事件)被調用的事件類型設置爲按鍵響應。

  2. keyPressEvent(QKeyEvent * event)被調用。

  3. 事件(QEvent的*事件)被調用設置爲KeyRelease事件類型。

  4. 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()沒有成功。

+0

我的聲望得分會超過你:P – 2011-08-16 21:46:19

回答

1

在Symbian上,Window服務器將密鑰事件發送給FEP(前端處理器),然後FEP(前端處理器)會要求控件輸入其功能(請參閱http://developer.symbian.org/main/documentation/reference/s3/pdk/GUID-FCEDC338-61CA-5D10-A8DB-E44A3EBBDE5E-GENID-1-10-1-3-1-1-9-1-3-1.html和TCoeInputCapabilities)。我認爲這是對錯誤報告的評論。

Symbian中的OfferKeyEventL功能是作爲一個Chain of Responsibility來實現的,這意味着如果鏈中的控件可以處理關鍵事件,它就會被使用並且鏈中的後續控件不會意識到它。

因此,由於未設置輸入功能(儘管我不知道如何通過Qt設置它們),事件被FEP丟棄,或者事件在鏈中較早消耗。

+0

感謝您的幫助,他們剛剛證實了這個錯誤 – 2010-09-28 10:34:27