Добрый день, Уважаемые)
Я, как и большинство в этой теме, полный новичок, и хотел бы от вас помощи.
Собственно, мне необходимо, чтобы в соответствии со значением моей функции gif-ка передвигалась по горизонтали.
Когда я связываю перемещение с событием MouseMove перемещение происходит в точности так, как должно.
Но когда я пытаюсь изменить его на какие-либо другие входные данные, появляется просто прозрачное зависшее окно.
Вот функция положения:
void RunAnimal::setPos(float p) {
pos = p;
qDebug() << (this->width() - animal->width()) * pos;
animal->move((this->width() - animal->width()) * pos, (this->height() - animal->height()) / 2);
Sleeper::msleep(10);
}
Причем, в qDebug строки бегут корректно, т.е. значение в функцию поступают
Функция установки положения:
void RunAnimal::mouseMoveEvent(QMouseEvent * e) {
setPos((float)e->x() / this->width());//чем правее от края мышь тем больше прогресс
qDebug() << 1.*e->x() << "Move Event \n";
}
Например, такой код дает повисшее окно в течении цикла, а затем картинка бегает за мышкой...
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
RunAnimal c;
c.show();
for(float i=0; i<100; i=i+1) {
c.setPos(i*0.01);
}
return a.exec();
}
Буду оооочень признателен за помощь!
===========================================================================
На всякий случай, выкладываю весь код:
#ifndef RUNANIMAL_H
#define RUNANIMAL_H
#define RUNANIMAL_H
#include <QImage>
#include <QWidget>
#include <QPushButton>
#include <QPixmap>
#include <QMovie>
class RunAnimal : public QWidget
{
Q_OBJECT
QWidget* animal;
QMovie *pig;
public:
RunAnimal(QWidget *parent = 0);
void resizeEvent(QResizeEvent *);
void mouseMoveEvent(QMouseEvent *);
float pos;//Будет от 0 до 1
void replace(float p);
public slots:
void setPos(float p);
};
#endif // RUNANIMAL_H
main.cpp:
#include "mainwindow.h"
#include <QApplication>
#include "Registration.h"
#include "RunAnimal.h"
#include <QRadioButton>
#include <QPushButton>
#include <QCheckBox>
#include <QVBoxLayout>
#include <iostream>
#include <QDebug>
#include <QMouseEvent>
#include <QFile>
#include <unistd.h>
#include <QTimer>
#include <QMetaObject>
#include <QThread>
#include <QPaintEvent>
class Sleeper: public QThread {
public:
static void msleep(int ms)
{
QThread::msleep(ms);
}
};
RunAnimal::RunAnimal(QWidget *parent) :
QWidget(parent) {
QMovie *movie = new QMovie("/home/popka/Документы/pig.gif");
animal = new QLabel(this);
qobject_cast<QLabel*>(animal)->setMovie(movie);
pos = 0.0f;
QLabel label;
label.setMovie(movie);
movie->start();
this->setMouseTracking(true);
this->setMinimumSize(1000,500);
}
void RunAnimal::resizeEvent(QResizeEvent *) {
setPos(pos);
}
void RunAnimal::setPos(float p) {
pos = p;
animal->move((this->width() - animal->width()) * pos, (this->height() - animal->height()) / 2);
Sleeper::msleep(50);
qDebug() << (this->width() - animal->width()) * pos ;
}
void RunAnimal::mouseMoveEvent(QMouseEvent * e) {
setPos((float)e->x() / this->width());//чем правее от края мышь тем больше прогресс
qDebug() << 1.*e->x() << "Move Event \n";
}
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
//Registration registration;
//registration.show();
RunAnimal c;
c.show();
for(float i=0; i<100; i=i+1) {
c.setPos(i*0.01);
}
return a.exec();
}