诺基亚N97 Qt应用程序上的按键事件出现问题 我在这个问题的中间停留了一个星期左右,在Symbian论坛上,我发现QT上有一个类似的问题,但是没有人回答。

诺基亚N97 Qt应用程序上的按键事件出现问题 我在这个问题的中间停留了一个星期左右,在Symbian论坛上,我发现QT上有一个类似的问题,但是没有人回答。,qt,qt4,symbian,keypress,n97,Qt,Qt4,Symbian,Keypress,N97,问题很简单,当我运行应用程序时,它仍然不是一个应用程序,只是一个原型:),无论是在模拟器上还是在真实设备上,使用物理QWERTY键盘键入普通字符,在这种情况下,设备是横向的,不调用功能keyPressEvent,但如果我按下回车键、退格键、不同的箭头键和动作键,就会调用它。如果我在emulator上运行应用程序并使用开发机器键盘键入,也会发生这种情况 另一方面,如果我在emulator上使用屏幕上的迷你QWERTY键盘,或者使用开发机器键盘进行键入,并且emulator处于纵向,则会调用keyP

问题很简单,当我运行应用程序时,它仍然不是一个应用程序,只是一个原型:),无论是在模拟器上还是在真实设备上,使用物理QWERTY键盘键入普通字符,在这种情况下,设备是横向的,不调用功能keyPressEvent,但如果我按下回车键、退格键、不同的箭头键和动作键,就会调用它。如果我在emulator上运行应用程序并使用开发机器键盘键入,也会发生这种情况

另一方面,如果我在emulator上使用屏幕上的迷你QWERTY键盘,或者使用开发机器键盘进行键入,并且emulator处于纵向,则会调用keyPressEvent函数

现在更具体地说,我有一个从QTextEdit继承的类,我覆盖了其中的函数keyPressEvent和focusInEvent,还调用了类构造函数中的函数setFocusPolicy,但似乎没有解决问题

我还必须说,我正在尝试的代码是示例customcompleter的修改版本,并且发现这个问题也发生在原始代码中

伙计们,有人知道怎么解决这个问题吗


注意。

您可以通过覆盖
事件(QEvent*)
并准确验证确实生成了哪些事件,来检查
keyReleaseEvent
和/或监视所有事件。可能正在生成不同的合适事件


然而,你描述的行为在我听来真的像个虫子。您可以检查和/或提交错误报告。

您可以通过覆盖
事件(QEvent*)
并准确验证确实生成了哪些事件来检查
keyReleaseEvent
和/或监视所有事件。可能正在生成不同的合适事件


然而,你描述的行为在我听来真的像个虫子。您可以查看和/或提交错误报告。

Kaleb,非常感谢您,我不知道我怎么从来没有想过尝试此功能!!现在,这个函数在我按下任意键时被调用,但仍然存在一些问题,所以我考虑在我的子类中重写事件(QEvent*),但它根本没有被调用,所以你知道为什么吗???
event(QEvent*)
是所有QWidget的主事件调度器,所以如果你的小部件正在处理事件,它将被调用。如果您没有看到事件,并且您的小部件确实正在接收事件——请验证您是否具有正确的签名。下面是我的类MyWidget的代码:public QTextEdit{Q_OBJECT public:MyWidget(QWidget*parent=0);void keyPressEvent(QKeyEvent*event);void keyReleaseEvent(QKeyEvent*event);bool event(QKeyEvent*event);};MyWidget::MyWidget(QWidget*parent):QTextEdit(parent){setText(“Hola”);}无效MyWidget::keyPressEvent(QKeyEvent*event){QWidget::keyPressEvent(event);}无效MyWidget::keyReleaseEvent(event){)}bool MyWidget::event(QKeyEvent*event){)(QKeyWidget::event)(event)(事件)}仔细看,您拥有的不匹配。您拥有
bool MyWidget::event(QKeyEvent*)
它使用了一个不同的参数。你说得对Kaleb,我的错,我没有注意到这个错误,但是你知道,在纠正这个错误后,它仍然没有进入功能keyPressEvent,这真的很奇怪,我不明白为什么会发生这种情况。Kaleb,非常感谢你,我不知道我怎么从来没有想到尝试过这个ffunction!!现在,这个函数是在我按下任意键时调用的,但是仍然存在一些问题,所以我想在我的子类中重写event(QEvent*),但它根本没有被调用,所以你知道为什么会这样吗???
event(QEvent*))
是所有QWidget的主事件调度器,因此如果您的小部件正在处理事件,则会调用它。如果您没有看到事件,并且您的小部件确实正在接收事件,请验证您是否具有正确的签名。下面是我的类MyWidget:public QTextEdit{Q_OBJECT public:MyWidget的代码(QWidget*parent=0);void keyPressEvent(QKeyEvent*event);void keyReleaseEvent(QKeyEvent*event);bool事件(QKeyEvent*event);};MyWidget::MyWidget(QWidget*parent):QTextEdit(parent){setText(“Hola”);}void MyWidget::keyPressEvent(QKeyEvent*event){);}void MyWidget::keyReleaseEvent(QKeyEvent*event){QWidget::keyReleaseEvent(event);}bool MyWidget::event(QKeyEvent*event){QWidget::event(event);}仔细看,您拥有的不匹配。您拥有
bool MyWidget::event(QKeyEvent*)
它使用了一个不同的参数。你说得对Kaleb,我的错,我没有注意到这个错误,但是你知道,在纠正这个错误后,它仍然没有进入功能keyPressEvent,这真的很奇怪,我不明白为什么会发生这种情况。