crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Elfinit
  опции профиля:
сообщение 9.11.2009, 11:35
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


В связи с выходом Qt 4.6 (пусть и беты) с простыми средствами анимирования приложения появилось резонное желание (и даже необходимость) сделать интерфейс более современным. Удалось сделать такие финтифлюшки, как размытие фона при показе модальных окон, "выползание" вспомогательных окон от ближайшего к (сохранённой) позиции края, плавное "растворение" окошек-notifications, прочая анимация....
Хочется теперь анимировать не только окошки, но и панельки. На скриншоте показаны они. Это те, рядом с которыми есть продолговатые кнопки со стрелками. Нажатие, очевидно, показывает/скрывает панельку. Хочется:
а) панелька скрыта - навели на кнопку - панелька начинает плавно выезжать поверх окна (т.е. не изменяет расположения виджетов)
б) нажали на кнопку - панелька плавно выползла/уползла (резайс остального происходит при фиксации панельки)
в) панельки "Свойства альбома", "Свойства фотографии", "Основное", "Альбомы".. тоже хочется, чтобы плавно выползали/уползали.

any ideas?

Сообщение отредактировал Elfinit - 11.11.2009, 23:54
Эскизы прикрепленных изображений
 Р Р€Р С˜Р ВµР Р…ьшено Р Т‘Р С• 73%
Прикрепленное изображение
981 x 768 (85.51 килобайт)
 Р Р€Р С˜Р ВµР Р…ьшено Р Т‘Р С• 73%
Прикрепленное изображение
981 x 768 (94.45 килобайт)
 Р Р€Р С˜Р ВµР Р…ьшено Р Т‘Р С• 73%
Прикрепленное изображение
981 x 768 (94.45 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 14)
Litkevich Yuriy
  опции профиля:
сообщение 9.11.2009, 11:42
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Elfinit @ 9.11.2009, 14:35) *
any ideas?
у тролей в лаборатории навалом примеров анимации.

Цитата(Elfinit @ 9.11.2009, 14:35) *
а) панелька скрыта - навели на кнопку - панелька начинает плавно выезжать поверх окна (т.е. не изменяет расположения виджетов)
GraphicsDojo\s-curve только сделать выезд на окно
Цитата(Elfinit @ 9.11.2009, 14:35) *
б) нажали на кнопку - панелька плавно выползла/уползла (резайс остального происходит при фиксации панельки)
в этот момент устанавливать виджету родителя [и засовывать в компоновщик]

s-curve компилится и с помощью Qt 4.4.х
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 9.11.2009, 12:22
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Цитата(Litkevich Yuriy @ 9.11.2009, 12:42) *
в этот момент устанавливать виджету родителя [и засовывать в компоновщик]

Т.е. не вмешиваясь в уже имеющуюся компоновку никак? очень не хочется с этим возиться)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.11.2009, 13:15
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Elfinit @ 9.11.2009, 15:22) *
Т.е. не вмешиваясь в уже имеющуюся компоновку никак? очень не хочется с этим возиться)
а как виджет должен догадаться где ему быть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 9.11.2009, 19:25
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Скрины мне почему-то клиент Picassa напоминают.

Цитата
размытие фона при показе модальных окон


Каким образом?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 10.11.2009, 11:06
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Цитата(SABROG @ 9.11.2009, 20:25) *
Скрины мне почему-то клиент Picassa напоминают.

На самом деле больше на лайтрум ориентировались, когда придумывали скин) Из Пикасы немного позаимствовано...Только ползунок зума, да и тот в новой версии лайтрума появился, но более убогий,чем в пикасе..

Цитата(SABROG @ 9.11.2009, 20:25) *
Каким образом?

Очень просто (правда, в итоге заменили размытие, на "пелену". Для размытия QGraphicsColorizeEffect нужно заменить на QGraphicsBlurEffect
int IAnimatedWindow::showModal()
{
    if (parentWidget()) {
        QGraphicsColorizeEffect *colorize = new QGraphicsColorizeEffect(parentWidget());
        colorize->setColor(QColor(110,110,110));
        parentWidget()->setGraphicsEffect(colorize);
    }
    int res = exec();
    if (parentWidget()) {
        parentWidget()->setGraphicsEffect(NULL);
    }
    return res;
}


Сообщение отредактировал Elfinit - 10.11.2009, 11:08
Эскизы прикрепленных изображений
 Р Р€Р С˜Р ВµР Р…ьшено Р Т‘Р С• 80%
Прикрепленное изображение
1280 x 1024 (124.28 килобайт)
 Р Р€Р С˜Р ВµР Р…ьшено Р Т‘Р С• 80%
Прикрепленное изображение
1280 x 1024 (86.38 килобайт)
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 13.11.2009, 17:46
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Такой вопрос: кто-нибудь знает, как сделать прозрачность для QMainWindow?
Вызов setWindowOpacity не даёт эффекта. В исходниках:
void QWidget::setWindowOpacity(qreal level)
{
   if (!isWindow())
     return;
  ....
}

Собственно, по этому условию и происходит выход. Как быть?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.11.2009, 17:54
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


из кода понятно, что выход осуществляется если виджет не окно, однако экземпляр QMainWindow, всегда окно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 13.11.2009, 18:02
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Да, когда я ковырялся с этим, мне показалось удивительным, что isWindow возвращает false. Сейчас ещё раз в код заглянул и понял, что жутко тупанул.....Вызываю setWindowOpacity не для объекта-окна, а для другого объекта, который это окно "контролирует" и имеет на него указатель...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 18.11.2009, 5:34
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
как размытие фона при показе модальных окон

А можно спросить как ты это сделал ? Помоги плиз а такая же задача стоит ?!

Сообщение отредактировал maxvanceffer - 18.11.2009, 5:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 18.11.2009, 9:48
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Цитата(maxvanceffer @ 18.11.2009, 5:34) *
А можно спросить как ты это сделал ?

Чуть выше я уже привёл исходник, смотри сообщение номер шесть.
А вот если ты разберёшься, как сделать, чтобы фон становился размытым (прозрачным, цветным....) не моментально, а постепенно - буду благодарен за пример кода)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.11.2009, 9:59
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Elfinit, ты не баловался с програмкой Fading Effects из Qt Quarterly, я баловался, там плавно появляются виджеты.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 18.11.2009, 10:49
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Цитата(Litkevich Yuriy @ 18.11.2009, 9:59) *
там плавно появляются виджеты.


В том, чтобы окошки появлялись плавно, нет никаких проблем, обычное PropertyAnimation для windowOpacity c нуля до единицы.
Я имею ввиду немного другое. Вот например появляется модальное окошко. При этом главное окно блокируется и становится размытым (или покрывается "сероватой пеленой", но это не принципиально). Для этого на parentWidget (в частности - на главное окно) вешается какой-нибудь графический эффект (например, QGraphicsBlurEffect). Так ведь он моментально окно размывает (т.е. эффект применяется моментально). А хотелось бы, чтобы это происходило поспенно (т.е. чтобы blurRadius за пол-секунды, например, увеличился от 0 до 5). Вешать таймер и каждые 100 миллисекунд вешать новый эффект как-то не хочется. Хотя, я не проверял что будет, если у уже применённого графического эффекта поменять этот самый blurRadius. На досуге поэкспериментирую)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.11.2009, 11:19
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Elfinit @ 18.11.2009, 13:49) *
Вешать таймер и каждые 100 миллисекунд вешать новый эффект как-то не хочется.
а подругому не получится. всё равно оно так и будет работать (еслиб было реализовано)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 18.11.2009, 12:38
Сообщение #15


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Цитата(Litkevich Yuriy @ 18.11.2009, 11:19) *
а подругому не получится.

Я имел ввиду, ручками это писать не хочется, к тому же хочется, чтобы универсально было....Хотя, может придумаю, как это универсально сделать...Каждые 100 миллисекунд делать new QGraphicsBlurEffect и т.п., скорее всего, не решение. Если только как раз параметры уже существующего эффекта менять, если это поддерживается) К тому же, возможно, тормоза появятся....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 22.6.2025, 18:28