2017-03-08 26 views
0

Qtを使用して3Dを学習していて問題があります。私は例を分析しています:https://doc.qt.io/qt-5/qt3d-basicshapes-cpp-example.htmlQt 3DのKeypressイベント

そして今私はそれを修正したかった:ユーザがキーを押したとき(何とか「w」と言う)、何かが動いている(またはこの段階で単にデバッグする)。私はkeyPressEvent関数を書こうとしましたが、何の効果もありません。私は標準の2Dアプリとは違うやり方でそれをやりますか?

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

乾杯、

Mikolaj
+0

'SceneModifier'がQObject''を継承し、それは 'keyPressEvent'方法 – eyllanesc

答えて

0

SceneModifierQObjectから継承し、keyPressEventメソッドを実装していません。

メソッドはウィンドウに属します。この場合は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(); 

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))); 

[...] 

Complete code

+0

うわ、それが動作を実装していません。詳細な説明をいただきありがとうございます! – Mikolaj

関連する問題