C++ Qt-3D中的按键事件

C++ Qt-3D中的按键事件,c++,qt,qt5,keypress,qt3d,C++,Qt,Qt5,Keypress,Qt3d,我正在使用Qt学习3D,但遇到了一个问题。我在分析一个例子: 现在我想修改它:当用户按下一个键(比如“w”)时,有东西在移动(或者在这个阶段只是调试打印)。我试图编写一个keyPressEvent函数,但没有效果。我应该用不同于标准2D应用程序的方式来做吗 void SceneModifier::keyPressEvent(QKeyEvent *event) { switch(event->key()) { case Qt::Key_W: {

我正在使用Qt学习3D,但遇到了一个问题。我在分析一个例子:

现在我想修改它:当用户按下一个键(比如“w”)时,有东西在移动(或者在这个阶段只是调试打印)。我试图编写一个
keyPressEvent
函数,但没有效果。我应该用不同于标准2D应用程序的方式来做吗

void SceneModifier::keyPressEvent(QKeyEvent *event)
{
    switch(event->key())
    {
        case Qt::Key_W:
        {
            qDebug()<<"Key is pressed";
            break;
        }
        default:
        break;
     }
}
void SceneModifier::keyPressEvent(QKeyEvent*event)
{
开关(事件->键())
{
案例Qt::关键点W:
{

qDebug()
SceneModifier
继承自
QObject
,并且它没有实现
keyPressEvent
方法

keyPressEven
t方法属于windows,在本例中为
Qt3DWindow
,因此我们创建了一个继承自它的类,并实现了
keyPressEvent
方法

my3dwindow.h

#ifndef MY3DWINDOW_H
#define MY3DWINDOW_H

#include <Qt3DExtras/Qt3DWindow>

class My3DWindow: public Qt3DExtras::Qt3DWindow
{
    Q_OBJECT
public:
    My3DWindow(QScreen *screen = nullptr);
    ~My3DWindow();

protected:

    void keyPressEvent(QKeyEvent *ev);
};

#endif // MY3DWINDOW_H
致:

main.cpp

#include "my3dwindow.h"
#include <QDebug>
#include <QKeyEvent>

My3DWindow::My3DWindow(QScreen *screen):Qt3DExtras::Qt3DWindow(screen)
{

}

My3DWindow::~My3DWindow()
{

}

void My3DWindow::keyPressEvent(QKeyEvent *ev)
{
    switch (ev->key()) {
    case Qt::Key_W:
        qDebug()<<"Key is pressed";
        break;
    default:
        break;
    }
}
[...]
#include "my3dwindow.h"

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    My3DWindow *view = new My3DWindow();
    view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));

 [...]

SceneModifier
继承自
QObject
,但它没有实现
keyPressEvent
方法
My3DWindow *view = new My3DWindow();
[...]
#include "my3dwindow.h"

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    My3DWindow *view = new My3DWindow();
    view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));

 [...]