cpp. - ругается на цикл где if: expected unqualified-id before '->' token, не нравится Sprite
#include "sprite.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
Sprite::Sprite(QObject *parent) : QObject(parent), QGraphicsItem() //, QGraphicsPixmapItem()
{
currentFrame = 0;
spriteImage = new QPixmap(":monkey.png");
this->setPos(QPointF(-10, -10));
}
Sprite::~Sprite()
{
}
QRectF Sprite::boundingRect() const
{
return QRectF(-10,-10,80,60); //область в которой лежит спрайт
}
void Sprite::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->drawPixmap(-10,-10, *spriteImage, currentFrame, 0, 80,60);
Q_UNUSED(option);
Q_UNUSED(widget);
}
void Sprite::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_W)
{ Sprite->setPos(0,5); } else
if (event->key() == Qt::Key_S)
{ Sprite->setPos(0,-5); } else
if (event->key() == Qt::Key_A)
{ Sprite->setPos(-5,0); } else
if (event->key() == Qt::Key_D)
{ Sprite->setPos(5,0); }
}
void Sprite::slotGameTimer()
{
if(this->x() - 10 < -250){
this->setX(-240); // слева
}
if(this->x() + 10 > 250){
this->setX(240); // справа
}
if(this->y() - 10 < -250){
this->setY(-240); // сверху
}
if(this->y() + 10 > 250){
this->setY(240); // снизу
}
/* Проверка выхода за границы поля */
}
На всякий случай хедер
#define SPRITE_H
#include <QObject>
#include <QGraphicsItem>
#include <QGraphicsPixmapItem>
#include <QTimer>
#include <QPixmap>
#include <QPainter>
#include <QGraphicsScene>
#include <QKeyEvent>
class Sprite : public QObject, public QGraphicsItem //, public QGraphicsPixmapItem
{
Q_OBJECT
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
public:
explicit Sprite(QObject *parent = 0);
QPointF pos() const;
void setPos(QPointF newPos);
//sprite();
~Sprite();
signals:
public slots:
void slotGameTimer();
private:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
QRectF boundingRect() const;
private:
// QTimer *timer;
QPixmap *spriteImage;
int currentFrame;
protected:
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
};
#endif // SPRITE_H
Не понимаю, что не так. Помогите, пожалуйста!
У вас Sprite
- название класса, класс не может быть слева от оператора ->
. Если вам нужно вызвать метод текущего объекта класса, пишите:
this->setPos(0,5);
или
setPos(0,5);
Не заметил сразу, у вас переопределён метод setPos
, не являющийся виртуальным. Определите, какой метод вам нужен: метод вашего класса Sprite
или класса QGraphicsItem
. Выберите один из следующих вариантов:
QGraphicsItem::setPos(0,5);
Sprite::setPos(QPointF(0,5));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Выдает после установки bootstrap 4 и jQuery в панели разработчика ошибки
Я новичок в программировании и хотелось бы досконально разобраться в чем разница между div и spanСтоит ли использовать только div или только span или...
Есть блок, в котором находится списокЕсть функция: при клике на элемент списка li меняется фон блока на соответствующий
Хочу скрывать блок пока пользователь находится в процессе пролистывания страницы и показывать его через пару секунд после остановки