Название: управление анимацией в SVG Отправлено: Natalie от Июль 23, 2008, 14:52 Всем здрасти :)
искала такой вопрос в существующих темах, но не нашла. вопрос такой: имеется SVG файл с анимацией. Возможно как-нибудь этой анимацией управлять? приостанавливать ее, возобновлять... может это можно сделать через QTimeLine? но честно говоря, не понимаю как. если кто-то такое делал, объясните пожалуйта :) Название: Re: управление анимацией в SVG Отправлено: pastor от Июль 23, 2008, 15:50 Посотрите класс QMovie.
Название: Re: управление анимацией в SVG Отправлено: Natalie от Июль 23, 2008, 16:22 у меня как-то не получалось проигрывать SVG файлы через класс QMovie.
Насколько я понимаю, для проигрывания SVG файлов Qt предоставляет классы QSvgRenderer, QSvgWidget и QGraphicsSvgItem. Но в них ничего об приостановки анимации не сказано. Название: Re: управление анимацией в SVG Отправлено: lit-uriy от Июль 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. Название: Re: управление анимацией в SVG Отправлено: Natalie от Июль 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 кадров в секунду. И даже если выставлять в два-три раза больше кадров в секунду, анимация при этом не ускоряется. Так что я как-то не поняла на что влияет эта функция... Название: Re: управление анимацией в SVG Отправлено: lit-uriy от Июль 23, 2008, 18:10 а немогли по случайности перепутать класс, ведь там их 3 штуки? уж управление скоростью должно работать.
(сам сейчас проверить немогу) Название: Re: управление анимацией в SVG Отправлено: Natalie от Июль 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. Название: Re: управление анимацией в SVG Отправлено: lit-uriy от Июль 23, 2008, 18:46 конструкторе какого класса?
--- Собственно сразу забыл спросить: Какая версия Qt и какая ОСь? Название: Re: управление анимацией в SVG Отправлено: Natalie от Июль 23, 2008, 20:07 в конструкторе класса SvgNativeView в примере painting/svgviewer
версия Qt у меня 4.4.0. Windows XP |