【问题标题】:Keypress events in Qt 3DQt 3D 中的按键事件
【发布时间】:2017-07-29 07:34:46
【问题描述】:

我正在使用 Qt 学习 3D,但遇到了问题。我正在分析示例:https://doc.qt.io/qt-5/qt3d-basicshapes-cpp-example.html

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

void SceneModifier::keyPressEvent(QKeyEvent *event)
{
    switch(event->key())
    {
        case Qt::Key_W:
        {
            qDebug()<<"Key is pressed";
            break;
        }
        default:
        break;
     }
}

干杯, 米科拉伊

【问题讨论】:

  • SceneModifier 继承自QObject 并没有实现keyPressEvent 方法

标签: c++ qt qt5 keypress qt3d


【解决方案1】:

SceneModifier 继承自 QObject 并没有实现 keyPressEvent 方法。

keyPressEvent方法属于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

my3dwindow.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;
    }
}

变化:

Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();

到:

My3DWindow *view = new My3DWindow();

ma​​in.cpp

[...]
#include "my3dwindow.h"

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

 [...]

Complete code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2011-01-03
    • 2012-06-12
    • 2017-01-01
    • 2013-09-23
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多