проблемы с QWidget::setMask |
Здравствуйте, гость ( Вход | Регистрация )
проблемы с QWidget::setMask |
Rocky |
8.4.2010, 22:45
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Всем привет! Помогите пожалуйста разобраться с проблемкой. В программе нужно сделать определенную анимацию. И требуется, чтобы эта анимация как бы пробегала по основной программе (вот как пример это всякие зверушки/девушки/помощники на рабочем столе). У меня бегающий дядя )). Я сделал виджет, в котором переопределил paintEvent. Далее задал этому виджету последовательность картинок *.png (с прозрачностью) и в таймере меняю счетчик кадров картинок (т.к. мужик бежит), затем вызываю метод repaint(). В самом обработчике paintEvent() я вызываю clearMask и затем setMask и после этого рисую новый кадр. В виндовсе вроде как нареканий нет никаких... только разве что медленно отрисовывает (виджет не успевает обрезаться по маске - ну это терпимо)... А в линуксе большие траблы ( При каждой перерисовке у меня мигает черный прямоугольник размером с весь виджет.. и из-за чего он возникает и как его убрать непонятно (. Помогите советом, как можно решить проблему? Может забабахать все картинки в какой-нить gif? Но как его отображать с учетом прозрачности тогда? маска ведь своя для каждого кадра... Или есть еще какие-нить анимированные форматы такие, в которые можно было бы без проблем перегнать png и qt бы их поддерживал?
Спасибо! PS. Вот кусок кода как я делаю.
Сигнал movieFinished соединен со слотом начала анимации (останов таймера у которого слот OnTimer, установка счетчика на 1-й кадр, запуск таймера) |
|
|
Rocky |
12.4.2010, 11:21
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Все как-то очень странно...
1. в paintEvent добавил QPainter::setOpacity(...); 2. this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); заменил на this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); 3. В качестве parentWidget указал класс, производный от QMainFrame (т.е. самый главный), а не 5-й производный от него... И вот так все работает... Нифига не понял в чем фишка.. Но факт на лицо =) ЗЫ. А с gif-ом лучче вообще не заморачиваться. Хотя срок патента на него вроде как истек, но качество у него не супер. Плюсь в qt все-таки он как-то оч непонятно поддерживается. Лучче тогда уж юзать mng - это анимированный png. И качество неплохое, и поддержка есть (тока в линуксе нужно специально компилить еще плагин qmng). Откопал прогу, называется PNG/MNG Construction Set. Оч легкая в освоении. ЗЗЫ. SABROG, спасибо еще раз за ImageMagic - пока ее искал нашел вот этот "PNG/MNG Construction Set". Сообщение отредактировал Rocky - 12.4.2010, 11:21 |
|
|
Текстовая версия | Сейчас: 6.2.2025, 4:40 |