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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: управление анимацией в SVG  (Прочитано 8954 раз)
Natalie
Гость
« : Июль 23, 2008, 14:52 »

Всем здрасти Улыбающийся

искала такой вопрос в существующих темах, но не нашла.

вопрос такой:
имеется SVG файл с анимацией. Возможно как-нибудь этой анимацией управлять? приостанавливать ее, возобновлять...
может это можно сделать через QTimeLine? но честно говоря, не понимаю как.

если кто-то такое делал, объясните пожалуйта Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июль 23, 2008, 15:50 »

Посотрите класс QMovie.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Natalie
Гость
« Ответ #2 : Июль 23, 2008, 16:22 »

у меня как-то не получалось проигрывать SVG файлы через класс QMovie.
Насколько я понимаю, для проигрывания SVG файлов Qt предоставляет классы QSvgRenderer, QSvgWidget и QGraphicsSvgItem. Но в них ничего об приостановки анимации не сказано.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 23, 2008, 17:30 »

Есть такой пример: painting/svgviewer (файл: painting/svgviewer/svgview.cpp )

и еще вот такой сигнал:
void QSvgRenderer::repaintNeeded ()   [signal]
This signal is emitted whenever the rendering of the document needs to be updated, usually for the purposes of animation.
« Последнее редактирование: Июль 23, 2008, 17:32 от lit-uriy » Записан

Юра.
Natalie
Гость
« Ответ #4 : Июль 23, 2008, 17:50 »

я смотрела этот пример, но там идет лишь load и затем просто проигрывается то, что записано в XML-е. Остановить присутствующую анимацию не удается.

Если же не подсоединять сигнал repaintNeeded() , то есть не писать так:
connect(doc, SIGNAL(repaintNeeded()), this, SLOT(update()));
то при изнении размеров окна, либо при сворачивании/разворацивании все равно происходит перерисовка и анимация проявляется (в случае с примером painting/svgviewer шарики покадрово появляются снизу сцены)

Также я попробовала использовать функцию QSvgRenderer::setFramesPerSecond(int num). В документации сказано:
The number of frames per second is 0 if the current document is not animated.
Я выставила значение 0, но это ни на что не повлияло Грустный Автоматом стоит 30 кадров в секунду. И даже если выставлять в два-три раза больше кадров в секунду, анимация при этом не ускоряется. Так что я как-то не поняла на что влияет эта функция...
« Последнее редактирование: Июль 23, 2008, 17:53 от Natalie » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июль 23, 2008, 18:10 »

а немогли по случайности перепутать класс, ведь там их 3 штуки? уж управление скоростью должно работать.
(сам сейчас проверить немогу)
Записан

Юра.
Natalie
Гость
« Ответ #6 : Июль 23, 2008, 18:30 »

я попыталась модифицировать пример painting/svgviewer
в конструкторе дописала:

doc = new QSvgRenderer(file, this);
doc->setFramesPerSecond(0); // <- добавила вот эту строчку
connect(doc, SIGNAL(repaintNeeded()), this, SLOT(update()));

проверила, что он выставляет 0 фреймов в секунду. Но никаких изменений.

и ни в одном из этих трех классов не нашла никакой другой функции, которая могла бы как-то остановить анимацию.

в SVG файле для каждого элемента анимация выставлена таким образом:
<animateTransform attributeName="transform" type="translate"
        values="0,0; 0,-800" begin="1s" dur="9s" fill="freeze" repeatCount="indefinite" />
может можно как-то достучаться до времени и остановить его. Или может можно изменить этот таг так, чтобы остановить анимацию, а затем ее возобновить по какому-то событию. Хотя из предоставляемых классов, насколько я поняла, доступен лишь id элементов из SVG.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июль 23, 2008, 18:46 »

конструкторе какого класса?
---
Собственно сразу забыл спросить: Какая версия Qt и какая ОСь?
Записан

Юра.
Natalie
Гость
« Ответ #8 : Июль 23, 2008, 20:07 »

в конструкторе класса SvgNativeView в примере painting/svgviewer

версия Qt у меня 4.4.0. Windows XP
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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