Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QGraphicsAnimation или не работает анимация! не могу создать анимацию 
V
    Опции темы
Sality123
Дата 10.3.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Всем привет, возникла такая вот задача, создать анимацию из 3 картинок (или более). нужно по принципу GIF анимации заставить чтоб объект быстро менял QPixmap - внешность, по очереди, чтоб казался эффект анимации... 
В этом нам хорошо помогает QGraphicsAnimation, а точнее QPropertyAnimation. 

например этот код заставит объект передвигаться по сцене:

QPropertyAnimation *animation1 = new QPropertyAnimation(QObject,"pos");
 
    animation1->setDuration(200);
    animation1->setStartValue(QPointF(10,10));
    animation1->setEndValue(QPointF(20,20));
    animation1->setEasingCurve(QEasingCurve::Linear);
 
    animation1->start();

Второй параметр у класса QPropertyAnimation, в моем случае "pos" это параметр заданный вот такой строкой, которая указывает анимации использовать именно изменение позиции

Q_PROPERTY(QPointF pos READ pos WRITE setPos); 

Тут как бы все понятно и все работает, но так как мне нужно не перемещение предмета а изменение его картинки, то есть внешнего вида, я решил создать еще один параметр

Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap);

и решил написать такую же анимацию, только уже с использованием моего второго параметра :


QPropertyAnimation *animation1 = new QPropertyAnimation(QObject,"pixmap");
 
    animation1->setDuration(200);
    animation1->setStartValue(QPixmap(":/ress/bb_3.png"));
    animation1->setEndValue(QPixmap(":/ress/bb_4.png"));
   
    animation1->start();

Вот тут и появилась проблема, анимация почему то не отрабатывается, и ожидаемой подмены к артинок не происходит... кто с подобным сталкивался помогите пожалуста.
заранее спс.

Это сообщение отредактировал(а) Sality123 - 10.3.2011, 23:05
PM MAIL   Вверх
Sality123
Дата 11.3.2011, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Не ужели не кто не делал анимации в Qt.... =(
PM MAIL   Вверх
borisbn
Дата 11.3.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



а кто сказал, что с Pixmap'ом должно работать ?
Из документации по QVariantAnimation:
Цитата

Below is a list of currently supported QVariant types:
Int
Double
Float
QLine
QLineF
QPoint
QPointF
QSize
QSizeF
QRect
QRectF
QColor

из исходников QVariantAnimation:
Код

    switch(interpolationType)
    {
    case QMetaType::Int:
        return castToInterpolator(_q_interpolateVariant<int>);
    case QMetaType::Double:
        return castToInterpolator(_q_interpolateVariant<double>);
    case QMetaType::Float:
        return castToInterpolator(_q_interpolateVariant<float>);
    case QMetaType::QLine:
        return castToInterpolator(_q_interpolateVariant<QLine>);
    case QMetaType::QLineF:
        return castToInterpolator(_q_interpolateVariant<QLineF>);
    case QMetaType::QPoint:
        return castToInterpolator(_q_interpolateVariant<QPoint>);
    case QMetaType::QPointF:
        return castToInterpolator(_q_interpolateVariant<QPointF>);
    case QMetaType::QSize:
        return castToInterpolator(_q_interpolateVariant<QSize>);
    case QMetaType::QSizeF:
        return castToInterpolator(_q_interpolateVariant<QSizeF>);
    case QMetaType::QRect:
        return castToInterpolator(_q_interpolateVariant<QRect>);
    case QMetaType::QRectF:
        return castToInterpolator(_q_interpolateVariant<QRectF>);
    default:
        return 0; //this type is not handled
    }


P.S. Вообще то требовать, чтобы тебе в час ночи (через два часа, после того, как ты задал вопрос) ответили IMHO неправильно.
Цитата

Дата 10.3.2011, 23:04
Всем привет, возникла такая вот задача...

Цитата

Дата 11.3.2011, 01:10
Не ужели не кто не делал анимации в Qt.... =(


Это сообщение отредактировал(а) borisbn - 11.3.2011, 11:48


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Sality123
Дата 11.3.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Извиняюсь) не подумал про время))

Интересно, так мало поддерживаемых метатипов... 

А каким образом можно создать анимацию? или подскажите хотя бы каким классом... В Qt так расхваливали мощность класса QGraphicsAnimation  и QMachine...  совсем не мощно получается... котя я может просто не умею ими правильно пользоваться...

заранее спс.
PM MAIL   Вверх
borisbn
Дата 11.3.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(Sality123 @  11.3.2011,  12:45 Найти цитируемый пост)
В Qt так расхваливали мощность класса QGraphicsAnimation

А что за класс такой ? Я у себя (да и на сайте нокии) не нашёл.

Цитата(Sality123 @  11.3.2011,  12:45 Найти цитируемый пост)
QMachine

м.б. QStateMachine из The State Machine Framework ?


Это сообщение отредактировал(а) borisbn - 11.3.2011, 14:17


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Sality123
Дата 11.3.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Да, опечатки, у меня просто с этими почти одинаковыми названиями уже все в кашу...

да, QStateMachine и QAbstractAnimation, от которых наследуется куча всяких *Animation-ов

вот дерево http://trinity.pearsoncomputing.net/docs/q...n-overview.html

Но проблема как бы остается... не могу создать анимацию.. элементарную анимацию как GIF картинка, просто подмена изображения...

Я догадываюсь что при своей мощности в Qt есть способ и инструменты... только какие... неизвестно для меня..



буду благодарен за помощь 
PM MAIL   Вверх
borisbn
Дата 11.3.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Первое решение, которое приходит в голову (вполне возможно, что не самое лучшее), это создать список (вектор) этих пиксмапов, запустить таймер и по таймеру отображать очередной элемент из списка.
Если уж очень хочется заюзать QVariantAnimation, можно создать анимацию для чисел типа int (от 0 до длины списка пиксмапов - 1), подцепиться к сигналу
Цитата

void valueChanged ( const QVariant & value )

и отображать в соответствующем слоте
Код

m_pixmapList.at( value.toInt() )



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Sality123
Дата 12.3.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Большое спс, ты Мегамозок! я бы не догадался заюзать анимайшин и в слоте ловить изменения и уже там подставлять картинку)))

А вот Qt- разрабам минус АдЫн!  как можно было не добавить пиксмап в проперти, да и вообще сам класс называется анимация, так будте добры сделайте инструмент для создания анимации.
PM MAIL   Вверх
Amp
Дата 12.3.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Цитата(Sality123 @  12.3.2011,  14:48 Найти цитируемый пост)
А вот Qt- разрабам минус АдЫн!  как можно было не добавить пиксмап в проперти, да и вообще сам класс называется анимация, так будте добры сделайте инструмент для создания анимации. 

Возможно из-за неоднозначности. Например непонятно какое смешивание цветов использовать, как изменять размер битмапа (если размеры отличаются). Много свойств выходит для одной примитивной анимации. 
PM MAIL   Вверх
borisbn
Дата 12.3.2011, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Sality123, спс, конечно, но Мегамазком меня ещё не называли...  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.