0

私は c++ に少し慣れていないため、次のコードでセグメンテーション違反が発生する理由を特定するのに少し苦労しています。

gamescene.h

#ifndef GAMESCENE_H
#define GAMESCENE_H

#include <QGraphicsScene>

class GameScene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit GameScene(QObject *parent = 0);
    virtual void keyPressEvent(QKeyEvent* );
    QGraphicsTextItem* p;
    ~GameScene();
signals:

public slots:

};

#endif // GAMESCENE_H

ゲームシーン.cpp

#include "gamescene.h"
#include "QKeyEvent"
#include "QGraphicsTextItem"
#include "QGraphicsRectItem"
#include "QDebug"
#include "QGraphicsScene"
#include "QScopedPointer"


GameScene::GameScene(QObject *parent) :
    QGraphicsScene(parent)
{
    QGraphicsTextItem* p = new QGraphicsTextItem(QString("HEEEEE"));
    p->setFlags(p->ItemIsMovable);
    p->moveBy(qreal(500),qreal(500));
    addItem(p);
}

void GameScene::keyPressEvent(QKeyEvent *event)

{
    qDebug() << (p != NULL);
    switch(event->key())
    case ( Qt::Key_W ):
    {
        qreal x, y;
        x = qreal(5);
        y = qreal(5);
        p->moveBy(x,y);
        qDebug() << "move up";

    }

}
GameScene::~GameScene() {


}

これは、ゲームシーン オブジェクトの keyPressEvent メソッドが呼び出され、QGraphicsTextItem ポインターに関連するものにアクセスしようとしたときに発生します。

明らかだと思いますが、どんな助けでも大歓迎です。

4

1 に答える 1

1

OK、使用しているライブラリについては何も知りませんが、エラーはここにあると思われます

GameScene::GameScene(QObject *parent) :
    QGraphicsScene(parent)
{
    QGraphicsTextItem* p = new QGraphicsTextItem(QString("HEEEEE"));
    p->setFlags(p->ItemIsMovable);
    p->moveBy(qreal(500),qreal(500));
    addItem(p);
}

する必要があります

GameScene::GameScene(QObject *parent) :
    QGraphicsScene(parent)
{
    p = new QGraphicsTextItem(QString("HEEEEE"));
    p->setFlags(p->ItemIsMovable);
    p->moveBy(qreal(500),qreal(500));
    addItem(p);
}

メソッドは p というメンバー変数を使用しようkeyPressEventとしていますが、コンストラクターでそれを設定しようとしているように見えますが、そうではありません。コンストラクターにあるのは、p とも呼ばれるローカル変数だけです。

于 2012-07-29T05:23:11.253 に答える