我将此错误发送给 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() 没有成功。