Qt状态机QState如何接收QKeyEvent?
// ----------------------------GraphicsScene.h ---------------------------------//class PlayState;class GraphicsScene : public QGraphicsScene{ Q_OBJECTpublic: GraphicsScene(int x, int y, int width, int height);signals:private slots:protected: void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event);private: PlayState *playState; QFinalState *final; bool playing; friend class PlayState;};// ----------------------------GraphicsScene.cpp 省略其它函数 ---------------------------------//void GraphicsScene::keyPressEvent(QKeyEvent *event){ if(playing) playState->keyPressEvent(event->key());}void GraphicsScene::keyReleaseEvent(QKeyEvent *event){ if(playing) playState->keyReleaseEvent(event);}// ----------------------------GraphicsScene.h ---------------------------------//class PlayState : public QState{ Q_OBJECTpublic: PlayState(GraphicsScene *scene, QState *parent); ~PlayState(); void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event);public slots:protected: void onEntry(QEvent *); void onExit(QEvent *);private : GraphicsScene *scene; QStateMachine *machine; QState *parallelChild; KeyBall *keyballSpace;};// ----------------------------PlayState.cpp 省略其它函数 ---------------------------------//void PlayState::keyPressEvent(QKeyEvent *event){ switch(event->key()) { case Qt::Key_Space: { keyballSpace->presse(); } break; default: break; }}void GraphicsScene::keyReleaseEvent(QKeyEvent *event){ switch(event->key()) { case Qt::Key_Space: { keyballSpace->release(); } break; default: break; }}GraphicsScene可以直接重写keyPressEvent(QKeyEvent *event)和keyReleaseEvent(QKeyEvent *event)我在GraphicsScene的keyPressEvent和keyReleaseEvent中调用PlayState中的keyPressEvent和keyReleaseEvent(PlayState中的keyPressEvent和keyReleaseEvent是自己定义的函数,父类没有这类函数),执行到keyballSpace->release()这句便出错,keyballSpace已new想问下是否有人和我出现类似的情况,或者是否有更好的办法在QState中接收到事件?