【问题标题】:Problem with keyPressEvent on Nokia N97 Qt application诺基亚 N97 Qt 应用程序上的 keyPressEvent 问题
【发布时间】:2011-04-12 22:00:29
【问题描述】:

我被这个问题困扰了一周左右,我在 Qt for Symbian 论坛上发现了一个类似的问题,但没有人回答。

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

另一方面,如果我在模拟器上使用屏幕迷你 QWERTY 键盘,或者使用开发机键盘打字并且模拟器是纵向的,keyPressEvent 函数会被调用。

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

另外我不得不说我正在尝试的代码是示例customcompleter的修改版本,发现原始代码也会出现这个问题。

各位,有没有人知道如何解决这个问题?

问候。

【问题讨论】:

    标签: qt qt4 symbian keypress n97


    【解决方案1】:

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

    但是,您所描述的行为对我来说确实是一个错误。您可以查看Qt Bug Tracker 和/或提交错误报告。

    【讨论】:

    • Kaleb,非常感谢,我不知道我怎么从来没有尝试过这个功能!现在,当我按下任何键时都会调用这个函数,但是仍然存在一些问题,所以我考虑在我的子类中覆盖 event(QEvent *) ,但它根本没有被调用,所以你知道为什么是吗??
    • event(QEvent*) 是所有 QWidgets 的主要事件调度程序,因此如果您的小部件正在处理事件,它将被调用。如果您没有看到事件并且您的小部件确实在接收事件 - 请验证您的签名是否正确。
    • 好吧,这是我的类 MyWidget 的代码: public QTextEdit { Q_OBJECT public: MyWidget(QWidget *parent=0);无效 keyPressEvent(QKeyEvent * 事件);无效 keyReleaseEvent(QKeyEvent * 事件);布尔事件(QKeyEvent *事件); }; MyWidget::MyWidget(QWidget *parent):QTextEdit(parent) { setText("Hola"); } void MyWidget::keyPressEvent(QKeyEvent *event) { QWidget::keyPressEvent(event); } void MyWidget::keyReleaseEvent(QKeyEvent *event) { QWidget::keyReleaseEvent(event); } bool MyWidget::event(QKeyEvent *event) { QWidget::event(event); }
    • 仔细看,你所拥有的不匹配。您有 bool MyWidget::event(QKeyEvent*) 使用不同的参数。
    • 你是对的 Kaleb,我的错,我没有注意到这个错误,但是你知道的,在更正后它仍然没有进入函数 keyPressEvent,这真的很奇怪,我可以'不明白为什么会这样。
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多