Russian Qt Forum

Qt => Мультимедиа => Тема начата: Lion от Май 29, 2007, 10:11



Название: Анимация иконок в Qt
Отправлено: Lion от Май 29, 2007, 10:11
Есть ли в Qt средства позволяющие сделать анимированые иконки, например, на кнопках?


Название: Анимация иконок в Qt
Отправлено: QCasper от Май 29, 2007, 10:23
Насчёт кнопок не знаю, но вот на QLabel можно. См. setMovie(QMovie *movie).


Название: Анимация иконок в Qt
Отправлено: goer от Май 29, 2007, 10:40
Для анимации есть QMovie но как по мне, от него больше проблем чем пользы, так что можно сделать анимацию например перебором кадров по таймеру.

Ну а для реализации в С++  есть такой мощный инструмент как наследование, так что все в твоих руках.


Название: Анимация иконок в Qt
Отправлено: dread от Май 29, 2007, 10:55
Смотря что ты подразумеваешь под анимацией на кнопках...
разное отображение при нажатии? или показ mng / серии картинок на кнопке?
если первое переопределяй рисование кнопки, если второе то тогда по методу goer'а...


Название: Анимация иконок в Qt
Отправлено: QCasper от Май 29, 2007, 12:18
Цитата: "goer"
Для анимации есть QMovie но как по мне, от него больше проблем чем пользы, так что можно сделать анимацию например перебором кадров по таймеру.

Ну а для реализации в С++  есть такой мощный инструмент как наследование, так что все в твоих руках.


А как сделать перебор кадров из файла формата *.mng или *.gif ?


Название: Анимация иконок в Qt
Отправлено: Lion от Май 29, 2007, 14:14
Дело в том, что повсюду используется QIcon, а он сам по себе инициализировать перерисовку не может, следовательно нужно переделывать все объекты в которых нужна анимация вместе с QIcon, либо через определенный промежуток времени менять вызывать setIcon(), что значительно усложнит программу.


Название: Анимация иконок в Qt
Отправлено: goer от Май 29, 2007, 15:54
Цитировать
А как сделать перебор кадров из файла формата *.mng или *.gif ?


Через QMovie::currentPixmap().

Вообще я подразумевал что анимация будет состоять из пнг-шек например (5-10 кадров более чем достаточно).

Цитировать
Дело в том, что повсюду используется QIcon, а он сам по себе инициализировать перерисовку не может, следовательно нужно переделывать все объекты в которых нужна анимация вместе с QIcon, либо через определенный промежуток времени менять вызывать setIcon(), что значительно усложнит программу.


Если хочешь впустую потратить время - подставляй костыли :-)
Вообще не факт что возможности QIcon на QAbstractButton удовлетворят заданию или изменениям в будущем.

Так что если хочешь сделать рабочий вариант анимации - то делай с нуля. (Либо наследованием от кнопки и переопределением рисования, либо через стили, либо через перехват событий).