我将此错误发送给Qt团队: http://bugreports.qt-project.org/browse/QTBUG-13726 这是描述:
QLineEdit / QTextEdit在N97上没有收到keyPressEvent 我有一个继承自QLinedEdit的自定义小部件,在这个小部件中我覆盖了事件(QEvent * event),keyPressEvent(QKeyEvent * event)和keyReleaseEvent(QKeyEvent * event)。当我在N97设备上调试代码时,当我按下键盘上的任意键时,事件按如下方式传送:
事件(QEvent *事件)。
调用keyReleaseEvent(QKeyEvent * event)。
并且从未调用过keyPressEvent !!
如果按Enter键,BackSpace,操作键,向左,向右,向下,向上,事件按如下方式传递:
事件(QEvent *事件)。
调用keyPressEvent(QKeyEvent * event)。
事件(QEvent *事件)。
调用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()但没有成功。
答案 0 :(得分:1)
在Symbian上,Window服务器将关键事件发送到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)。我认为这是对bug报告的评论所提到的。
Symbian中的OfferKeyEventL功能实现为责任链,这意味着如果链中的控件可以处理键事件,则会消耗它,并且链中的后续控件将不会知道它。
因此,由于没有设置输入功能(尽管我不知道如何通过Qt设置它们)或者事件在链中较早消耗,因此FEP会丢弃该事件。