2015-06-17 6 views
0

У меня есть символ, добавленный через QgraphicsPixmapitem, и теперь я хочу переместить его, нажав клавиши со стрелками на клавиатуре. Но я не могу найти способ. Он дает ошибка компиляции. Помоги мне, пожалуйста!Переместить 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(); 
} 

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

Edit:

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

error: no matching function for call to 'moveship::moveship(QPixmap&)'
moveship * player = new moveship(q);

+1

Какая ошибка компиляции? Что такое 'qDebug()' output? – dazewell

+0

@dazewell: Ошибка компиляции: "ошибка: нет функции соответствия для вызова 'moveship :: moveship (QPixmap &)' moveship * игрок = новый moveship (д); ^" –

+0

вы Шоуда обновили ваш вопрос с этим уведомлением, потому что он меняет весь вопрос. Разве вы не видите, что компилятор говорит вам? Проверьте подпись своего конструктора 'movehip'. Вы его не показывали или вообще не существует? – dazewell

ответ

0

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

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

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

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

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

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

+0

Не родитель конструктор будет называться автоматом? Мое предположение было аргументом неправильным ... моя догадка была неправильной ... – Thalia

+0

@Thalia нет, это не будет. Будет конструктор по умолчанию, созданный 'movehip();', и он не имеют QPixmap в качестве аргумента, и это то, что вызывает ошибку. Моя реализация ** делает ** вызывать конструктор parent с заданными параметрами дочернего класса. – dazewell

+0

большое спасибо @dazewell. Я знаю, что это было довольно глупо с моей стороны. Извинения. –