Russian Qt Forum
Ноябрь 23, 2024, 09:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: перемещение QGraphicsPixmapItem по сцене  (Прочитано 3143 раз)
widoki
Гость
« : Июнь 16, 2011, 00:21 »

имеется класс
Код:
#ifndef CBOX_H
#define CBOX_H

#include <QGraphicsPixmapItem>
#include <QGraphicsScene>
#include <QTimer>
#include <QPixmap>
#include <QPainter>

class myPic : public QObject, public QGraphicsPixmapItem
{
    Q_OBJECT
public:
    myPic( QGraphicsScene*);
    void myPicFallDown ();
    ~myPic();

    qreal GetX();
    qreal GetY();
    void setX(qreal);
    void setY(qreal);
   
protected slots:
    virtual void timerEvent(QTimerEvent *);

protected:
    QGraphicsPixmapItem *myPic;
    qreal x;
    qreal y;
};

#endif // CBOX_H

Код:
#include "mypic.h"

myPic:: myPic( QGraphicsScene* scene )
{
        x=1100.0;
        y=0.0;
        setOffset (x,y);
        myPic->setPixmap( QPixmap( ":/myPic/nameofmypic.PNG" ) );
        scene->addItem( this );
        QTimer *timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(myPicFallDown()));
        timer->start(1000);   
}

void myPic::myPicFallDown()
{
        setY(GetY+5);
        setOffset (x,y);
}

нужно, чтобы картинка упала и осталась лежать на полу, а не соскальзывала вниз.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июнь 16, 2011, 00:32 »

отключить таймер когда достиглись нужные координаты?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
widoki
Гость
« Ответ #2 : Июнь 16, 2011, 00:58 »

Код:
#include "mypic.h"

myPic:: myPic( QGraphicsScene* scene )
{
        x=1100.0;
        y=0.0;
        setOffset (x,y);
        myPic->setPixmap( QPixmap( ":/myPic/nameofmypic.PNG" ) );
        scene->addItem( this );
        QTimer *timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(timerEvent (QTimerEvent *)));
        timer->start(1000);   
        if (GetY<=120) timer->stop();
}

void myPic::timerEvent (QTimerEvent *)
{
   myPicFallDown();
}

void myPic::myPicFallDown()
{
        setY(GetY+5);
        setOffset (x,y);
}
Записан
widoki
Гость
« Ответ #3 : Июнь 16, 2011, 00:59 »

отключить таймер когда достиглись нужные координаты?

м?
if (GetY<=120) timer->stop();
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Июнь 16, 2011, 01:45 »

так не в конструкторе ж (он вызывается только при создании айтема, ну по крайней мере так должно быть), а в myPicFallDown() или timerEvent()

да, и GetY же у тебя метод, а не переменная, потому GetY()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 22.