Название: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: Crazy Sage от Сентябрь 02, 2014, 16:09 Добрый день. Возник тут вопрос.
Есть qgraphicsscene, на ней некоторое количество объектов (круги, линии, квадраты), которым надо при выборе сделать подсветку бегущим черно-белым пунктиром, типа рамки выбора в фотошопе. Посоветуйте, как это проще всего сделать? Пока приходит в голову только при выборе объекта запускать в нём таймер, и по этому таймеру рисовать более широкой кистью подложку, вначале сплошную, потом пунктирную, меняя при этом цвета подложки и пунктира, но это всё-таки даст просто мигание, да и в оптимальности метода сомневаюсь. Может есть какие-то более адекватные способы реализовать подобную штуку? Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: navrocky от Сентябрь 03, 2014, 08:39 У QPen есть свойство dashOffset, меняя его ты получишь смещение штрихов. Для анимации сделай у объекта рамки численное свойство смещение штриха и анимируй его с помощью QPropertyAnimation.
Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: Bepec от Сентябрь 03, 2014, 09:28 Да зачем QPropertyAnimation? Хватит простого таймера.
Смещение штрихов лишь иллюзия. Нужно только 3 кадра для полноценной сетки -0,5; 0; 0,5; штриха. Повторяя их циклично должны получить иллюзию движущейся обводки. Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: navrocky от Сентябрь 03, 2014, 10:33 Да зачем QPropertyAnimation? Хватит простого таймера. Смещение штрихов лишь иллюзия. Нужно только 3 кадра для полноценной сетки -0,5; 0; 0,5; штриха. Повторяя их циклично должны получить иллюзию движущейся обводки. Для плавной анимации таймер не годится. Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: Bepec от Сентябрь 03, 2014, 10:43 Хм. Это странно, ведь QPropertyAnimation
Цитировать Behind the scenes, the animations are controlled by a global timer, which sends updates to all animations that are playing. ...Как так не годится, если оно им управляется? :) Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: GreatSnake от Сентябрь 03, 2014, 11:10 Для анимации сделай у объекта рамки численное свойство смещение штриха и анимируй его с помощью QPropertyAnimation. Интересно каким образом для QGraphicsItem можно задействовать QPropertyAnimation ???Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: Bepec от Сентябрь 03, 2014, 11:12 Кстати да, оно ж вроде не от QObject'a, не?
PS пока вижу вариант что рамкой управлять будет сцена через всё таки таймер :D Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: navrocky от Сентябрь 03, 2014, 11:48 Для анимации сделай у объекта рамки численное свойство смещение штриха и анимируй его с помощью QPropertyAnimation. Интересно каким образом для QGraphicsItem можно задействовать QPropertyAnimation ???Элементарно: Код
Или использовать QGraphicsObject. Или использовать QVariantAnimation. Преимущество анимационного движка перед обычным таймером заключается в том, что он рисует с максимальной возможной плавностью, тики анимации синхронизированны между всеми объектами анимаций, текущее состояние анимированного значения правильно интерполируется по шкале времени (возможно коряво выразился, но смысл, что это не просто инкремент на единичку по тику таймера). На мой взгляд, анимации надо делать специализированными механизмами, которые присутствуют в Qt, а не городить велосипеды. Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: GreatSnake от Сентябрь 03, 2014, 11:52 На мой взгляд, анимации надо делать специализированными механизмами, которые присутствуют в Qt, а не городить велосипеды. Присутствующие в Qt механизмы не подходят для QGraphicsItem.То, что предлагается выше иначе как "городить велосипеды" не назовёшь :( Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: navrocky от Сентябрь 03, 2014, 12:00 На мой взгляд, анимации надо делать специализированными механизмами, которые присутствуют в Qt, а не городить велосипеды. Присутствующие в Qt механизмы не подходят для QGraphicsItem.То, что предлагается выше иначе как "городить велосипеды" не назовёшь :( Не согласен. Уже много лет использую анимацию для анимирования элементов сцены, всё плавно и красиво. А если надо будет Easing Curve применить, как будете на таймере это городить? Возможно в рамках задачи ТС это и не нужно, но помимо рамки с муравьями есть и другие применения. К примеру, на схеме может плавно появляться новый элемент, или его перемещение можно заанимировать и т.д. QVariantAnimation - универсальна, её можно применять ко всему чему угодно а не только к наследнику от QObject. Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: GreatSnake от Сентябрь 03, 2014, 12:39 QVariantAnimation - универсальна, её можно применять ко всему чему угодно а не только к наследнику от QObject. Да, согласен.Название: Re: Анимированная подсветка объекта на QGraphicsScene в Qt4. Отправлено: Crazy Sage от Сентябрь 03, 2014, 12:58 Спасибо за советы. Правда как оказалось я не учёл, что Qt у меня строго не старше 4.4.2, там этих классов ещё не было.
Придётся делать таймер. Хотя на будущее всё равно запомню про эти варианты. |