У меня есть персонаж, добавленный через 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);
Ну, нет ничего общего в вопросе, который вы задаете, и в ошибке, которую вы получаете. Как я вижу, у вас нет конструктора вашего класса moveship
и это именно то, что говорит вам компилятор. Должно быть что-то вроде:
moveship(const QPixmap & pixmap, QGraphicsItem * parent = 0)
в заголовке вашего класса с некоторой реализацией, конечно, и, как я вижу, это тривиально:
moveship::moveship(const QPixmap & pixmap, QGraphicsItem * parent = 0)
: QGraphicsItem(pixmap, parent);
Это базовые знания, которые вы должны иметь при использовании c ++. Здесь нет ничего особенного в Qt. Советую немного выучить с ++.
Кстати, переопределено ...event(...)
функции рекомендуется размещать в protected
часть класса, а также объявить его virtual
,