KeyPressedEvent 未注册
KeyPressedEvent not registering
我是 Qt 的新手,正在尝试实现一个应该非常简单的“按键按下”事件方法,但它似乎没有正确注册。
这是我的头文件中的声明:
#include <Qt>
#include <QKeyEvent>
class MainWindow : public QMainWindow
{
Q_OBJECT
protected:
void KeyPressEvent(QKeyEvent* event);
};
这是实现:
void MainWindow::KeyPressEvent(QKeyEvent *event)
{
qDebug() << "Registered Key Press";
}
这几乎就是我在网上看到的例子的样子,所以除非我遗漏了某些联系,否则不确定会是什么问题。
正如您所说,几乎完全示例显示的内容。他们应该显示
void keyPressEvent(QKeyEvent* event) override;
参见 QWidget::keyPressEvent。请注意 C++ 区分大小写 (K -> k).
此外,我添加了 override 关键字 - 如果您尝试覆盖编译器不知道的函数,编译器会告诉您!
以上链接文档中包含其他注意事项:
确保使用适当的策略调用 setFocusPolicy
;
另请注意,child 小部件可以“吞噬”事件。意思是如果你的主 window 有任何 children;并且按键发生在 child 内,child 可以说“我处理这个事件,不需要将它传递给我的 parent”。那么你的 MainWindow::keyPressEvent
也不会被调用;见QKeyEvent
documentation中的相应注释;要点:任何 child window 的 MainWindow
处理 keyPressEvent
必须 ignore()
事件才能传播到 parent class.
我是 Qt 的新手,正在尝试实现一个应该非常简单的“按键按下”事件方法,但它似乎没有正确注册。
这是我的头文件中的声明:
#include <Qt>
#include <QKeyEvent>
class MainWindow : public QMainWindow
{
Q_OBJECT
protected:
void KeyPressEvent(QKeyEvent* event);
};
这是实现:
void MainWindow::KeyPressEvent(QKeyEvent *event)
{
qDebug() << "Registered Key Press";
}
这几乎就是我在网上看到的例子的样子,所以除非我遗漏了某些联系,否则不确定会是什么问题。
正如您所说,几乎完全示例显示的内容。他们应该显示
void keyPressEvent(QKeyEvent* event) override;
参见 QWidget::keyPressEvent。请注意 C++ 区分大小写 (K -> k).
此外,我添加了 override 关键字 - 如果您尝试覆盖编译器不知道的函数,编译器会告诉您!
以上链接文档中包含其他注意事项:
确保使用适当的策略调用
setFocusPolicy
;另请注意,child 小部件可以“吞噬”事件。意思是如果你的主 window 有任何 children;并且按键发生在 child 内,child 可以说“我处理这个事件,不需要将它传递给我的 parent”。那么你的
MainWindow::keyPressEvent
也不会被调用;见QKeyEvent
documentation中的相应注释;要点:任何 child window 的MainWindow
处理keyPressEvent
必须ignore()
事件才能传播到 parent class.