Hej! Napisałem jakiś programik, chciałem dodać animację GIF z przezroczystością.
Udało mi się to stosując etykietke (QLabel) i klasę QMovie...
Problem w tym, że jak przesuwam etykietkę w pętli (co 1 ms jest pauza), to animacja się zatrzymuje... Po przesunięciu do miejsca docelowego to z powrotem się odtwarza... Kod
ui->setupUi(this);
Wysokosc = 0;
QMovie *movie1 = new QMovie(ui->label);
movie1->setFileName(":/zasoby/animdome_e0.gif");
movie1->setCacheMode(QMovie::CacheAll);
ui->label->setMovie(movie1);
movie1->start();
......
// tutaj klasa, dzięki której mogę wstrzymywać działanie aplikacji
class SleepThread : public QThread{
Q_OBJECT
// private run
void run (){}
public :
static void usleep(long iSleepTime){
QThread::usleep(iSleepTime);
}
static void sleep(long iSleepTime){
QThread::sleep(iSleepTime);
}
static void msleep(long iSleepTime){
QThread::msleep(iSleepTime);
}
};
// ...
// tutaj jest przesuwany obrazek (animowany gif) w dół, po wciśnięciu przycisku
void MainWindow::on_pushButton_2_clicked()
{
QApplication::sendPostedEvents();
for (int i = 0; i<100; i++)
{
update();
repaint();
// ui->label->setUpdatesEnabled(TRUE);
ui->label->setGeometry(100, Wysokosc++, 160, 120);
SleepThread::msleep(1);
ui->label->update();
ui->label->repaint();
}
Wszystko jest ok, tylko jak przesuwam label z animowanym gifem to animacja na czas przesunięcia się zatrzymuje....
Zrobiłem coś podobnego w C# i Windows Forms (.NET 4.0) i tam przesuwanie pictureBoxa z animowanym gifem nie powoduje zatrzymania animacji w tym pictureBoxie....
Może w Qt animacja jest w tym samym głównym wątku co aplikacja?