0

QgraphicsPixmapitem を介して追加されたキャラクターがあり、キーボードの矢印キーを押して移動したいと考えています。しかし、私は方法を見つけることができません。コンパイルエラーが発生します。お願い助けて!

moveship.h (私の QPixmapItem のヘッダー ファイル)

#ifndef MOVESHIP_H
#define MOVESHIP_H
#include <QGraphicsPixmapItem>

class moveship: public QGraphicsPixmapItem
{
    public:
    void keyPressEvent(QKeyEvent *event);
};
#endif // MOVESHIP_H

キーの押下を認識するかどうかを確認しているだけです。

keyPressEvent の実装:

#include "moveship.h"
#include <QDebug>

void moveship::keyPressEvent(QKeyEvent *event)
{
    qDebug() << "moved";
}

私の主なソースファイル:

#include<QApplication>
#include<QGraphicsScene>
#include<QGraphicsView>
#include<QGraphicsPixmapItem>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene * scene = new QGraphicsScene();
    QGraphicsView * view = new QGraphicsView(scene);

    QPixmap q = QPixmap("://images/player.png");
    if(q.isNull())
    {
        printf("null\n");
    }
    else
    {
        moveship * player = new moveship(q);
        scene->addItem(player);
    }

    view->resize(500,500);
    view->show();

    return a.exec();
}

助けてください :(

編集:

私が得るコンパイルエラーは次のとおりです。

エラー: 'moveship::moveship(QPixmap&)' の呼び出しに一致する関数がありません
moveship * player = new moveship(q);

4

1 に答える 1

0

さて、あなたが尋ねる質問とあなたが得るエラーに共通するものは何もありません。ご覧のとおり、クラスのコンストラクターはありませんmoveship。それはまさにコンパイラーがあなたに伝えていることです。次のようなものがあるはずです:

moveship(const QPixmap & pixmap, QGraphicsItem * parent = 0)

もちろん、いくつかの実装を使用してクラスのヘッダーに追加します。私が見るように、それは簡単です:

moveship::moveship(const QPixmap & pixmap, QGraphicsItem * parent = 0) 
                 : QGraphicsItem(pixmap, parent);

これは、C++ を使用する際に知っておくべき基礎知識です。ここでは、Qt について特別なことは何もありません。C++ を少し学習することをお勧めします。

ところで、再実装...event(...)された関数をprotectedクラスの一部に配置し、それを宣言することをお勧めしますvirtual

于 2015-06-17T16:16:10.450 に答える