Qt 3D 中的按键事件
Keypress events in Qt 3D
我正在使用 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
方法。
keyPressEven
t方法属于windows,在本例中是Qt3DWindow
,所以我们创建一个继承它的class并实现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();
main.cpp
[...]
#include "my3dwindow.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
My3DWindow *view = new My3DWindow();
view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
[...]
我正在使用 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
方法。
keyPressEven
t方法属于windows,在本例中是Qt3DWindow
,所以我们创建一个继承它的class并实现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();
main.cpp
[...]
#include "my3dwindow.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
My3DWindow *view = new My3DWindow();
view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x4d4d4f)));
[...]