Переместить QGraphicsPixmapItem через клавиатуру

У меня есть персонаж, добавленный через QgraphicsPixmapitem, и теперь я хочу переместить его, нажимая клавиши со стрелками на клавиатуре. Но я не могу найти способ. Это дает ошибку компиляции. Помоги мне, пожалуйста!

movehip.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();
}

Пожалуйста помоги:(

Редактировать:

Ошибка компиляции, которую я получаю:

ошибка: не найдена соответствующая функция для вызова 'Movehip:: Movehip(QPixmap&)'
движение * игрок = новое движение (q);

1 ответ

Ну, нет ничего общего в вопросе, который вы задаете, и в ошибке, которую вы получаете. Как я вижу, у вас нет конструктора вашего класса moveshipи это именно то, что говорит вам компилятор. Должно быть что-то вроде:

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

в заголовке вашего класса с некоторой реализацией, конечно, и, как я вижу, это тривиально:

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

Это базовые знания, которые вы должны иметь при использовании C++. Здесь нет ничего особенного в Qt. Советую немного выучить с ++.

Кстати, переопределено ...event(...) функции рекомендуется размещать в protected часть класса, а также объявить его virtual,

Другие вопросы по тегам