Qt 输入方法是否阻止QLineEdit接收KeyPressEvent?
我将此错误发送给Qt团队: 以下是描述: QLineEdit/QTextEdit在N97上未收到KeyPress事件 我有一个从QLinedEdit继承的自定义小部件,在这个小部件中我覆盖事件(QEvent*事件)、按键事件(QKeyEvent*事件)和按键释放事件(QKeyEvent*事件)。当我在N97设备上调试代码时,当我按下键盘上的任意键时,事件将按如下方式传递:Qt 输入方法是否阻止QLineEdit接收KeyPressEvent?,qt,qt4,symbian,nokia,n97,Qt,Qt4,Symbian,Nokia,N97,我将此错误发送给Qt团队: 以下是描述: QLineEdit/QTextEdit在N97上未收到KeyPress事件 我有一个从QLinedEdit继承的自定义小部件,在这个小部件中我覆盖事件(QEvent*事件)、按键事件(QKeyEvent*事件)和按键释放事件(QKeyEvent*事件)。当我在N97设备上调试代码时,当我按下键盘上的任意键时,事件将按如下方式传递: 调用事件(QEvent*events),并将事件类型设置为KeyRelease 调用keyReleaseEvent(QKey
#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); }
}
#包括
#包括
#包括
#包括
#包括
类MyWidget:publicqlineedit{Q_对象public:MyWidget(QWidget*parent=0);void keyPressEvent(QKeyEvent*event);void keyereleasevent(QKeyEvent*event);bool event(QEvent*event);};
MyWidget::MyWidget(QWidget*父项)
:QLineEdit(父级)
{setText(“Hola”);}
void MyWidget::keyPressEvent(QKeyEvent*事件){QLineEdit::keyPressEvent(事件);}
void MyWidget::keyReleaseEvent(QKeyEvent*事件){QLineEdit::keyReleaseEvent(事件);}
bool MyWidget::事件(QEvent*事件){
开关(event->type()){case QEvent::KeyPress:QLineEdit::event(事件);中断;case QEvent::KeyRelease:QLineEdit::event(事件);中断;默认值:QLineEdit::event(事件);}
}
如果从QTextEdit继承,则会出现相同的问题
我有一个重播:
这不是因为输入法吗?
有人能给我解释一下他所说的“输入方法”是什么意思,以及它与接收到的事件的关系吗?我尝试了setInputMethodHits()和inputMethodEvent(),但没有成功。在Symbian上,窗口服务器向FEP(前端处理器)发送关键事件,FEP反过来要求控件提供其输入功能(请参阅和TCoeInputCapabilities)。我认为这就是对bug报告的评论所指的内容 Symbian中的OfferKeyEventL功能是作为一个责任链实现的,这意味着如果链中的控件可以处理关键事件,它将被消耗,链中的后续控件将不会意识到它
因此,要么由于未设置输入功能(尽管我不知道如何通过Qt设置),事件被FEP丢弃,要么事件在链的早期被消耗。在Symbian上,窗口服务器向FEP(前端处理器)发送关键事件,后者反过来要求控件提供其输入功能(请参阅和TCoeInputCapabilities)。我认为这就是对bug报告的评论所指的内容 Symbian中的OfferKeyEventL功能是作为一个责任链实现的,这意味着如果链中的控件可以处理关键事件,它将被消耗,链中的后续控件将不会意识到它
因此,要么由于未设置输入功能(尽管我不知道如何通过Qt设置),事件被FEP丢弃,要么事件在链中的较早阶段被消耗。我的声誉分数将比你高:Pmy声誉分数将比你高:p