crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Анимация поверх картинки
igor_bogomolov
  опции профиля:
сообщение 23.9.2009, 23:40
Сообщение #11


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Если тебе не нужно рисовать поверх нескольких виджетов одновременно, а только поверх лейбла, задача сильно упрощается. Никакой childRecursive тебе не нужен (прочитай еще раз внимательно статью по ссылке выше).

Создай собственный виджет, примерно так
.h
#ifndef FORM_H
#define FORM_H

#include <QtGui/QLabel>

class MyLabel : public QLabel
{
    Q_OBJECT
    Q_DISABLE_COPY(MyLabel);
public:
    MyLabel(QWidget *parent = 0);
protected:
    bool eventFilter(QObject *obj, QEvent *event);
private slots:
    void myslot2(int frame);
private:
    QMovie* movie;
    QImage image;
};

#endif // FORM_H
.cpp
#include <QtGui>
#include "form.h"

#include <QtDebug>

MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
    setPixmap(QPixmap("logo.gif"));
    setScaledContents(true);

    setAutoFillBackground(false);
    installEventFilter(this);

    movie = new QMovie("post.gif", "gif", this);
    connect(movie, SIGNAL(frameChanged(int)), this, SLOT(myslot2(int)));

    movie->start();
}

bool MyLabel::eventFilter(QObject *obj, QEvent *event)
{
    if( (event->type() == QEvent::Paint) && (obj == this) ) {
        removeEventFilter(this);
        QApplication::sendEvent(obj, event);
        installEventFilter(this);

        QPainter p(qobject_cast<QWidget*>(obj));
        p.drawImage(rect().center() - movie->frameRect().bottomRight(), image);
        return true;
    }
    return false;
}

void MyLabel::myslot2(int)
{
    image = movie->currentImage();
    update();
}
main.cpp
#include <QtGui/QApplication>
#include "form.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyLabel frm;
    frm.show();
    return a.exec();
}
и используй его в своем приложении. (post.gif - это твоя gif)...

Прикрепляю рабочий примерчик, дальше сам для себя допилишь )))
Прикрепленные файлы
Прикрепленный файл  test.tar ( 40 килобайт ) Кол-во скачиваний: 97
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 24.9.2009, 12:09
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


О, всё заработало)) Спасибо)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 17:23