Russian Qt Forum
Ноябрь 23, 2024, 03:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Анимированная подсветка объекта на QGraphicsScene в Qt4.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Анимированная подсветка объекта на QGraphicsScene в Qt4. (Прочитано 6798 раз)
Crazy Sage
Гость
Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
:
Сентябрь 02, 2014, 16:09 »
Добрый день. Возник тут вопрос.
Есть qgraphicsscene, на ней некоторое количество объектов (круги, линии, квадраты), которым надо при выборе сделать подсветку бегущим черно-белым пунктиром, типа рамки выбора в фотошопе. Посоветуйте, как это проще всего сделать? Пока приходит в голову только при выборе объекта запускать в нём таймер, и по этому таймеру рисовать более широкой кистью подложку, вначале сплошную, потом пунктирную, меняя при этом цвета подложки и пунктира, но это всё-таки даст просто мигание, да и в оптимальности метода сомневаюсь.
Может есть какие-то более адекватные способы реализовать подобную штуку?
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #1 :
Сентябрь 03, 2014, 08:39 »
У QPen есть свойство dashOffset, меняя его ты получишь смещение штрихов. Для анимации сделай у объекта рамки численное свойство смещение штриха и анимируй его с помощью QPropertyAnimation.
Записан
Гугль в помощь
Bepec
Гость
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #2 :
Сентябрь 03, 2014, 09:28 »
Да зачем QPropertyAnimation? Хватит простого таймера.
Смещение штрихов лишь иллюзия. Нужно только 3 кадра для полноценной сетки -0,5; 0; 0,5; штриха. Повторяя их циклично должны получить иллюзию движущейся обводки.
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #3 :
Сентябрь 03, 2014, 10:33 »
Цитата: Bepec от Сентябрь 03, 2014, 09:28
Да зачем QPropertyAnimation? Хватит простого таймера.
Смещение штрихов лишь иллюзия. Нужно только 3 кадра для полноценной сетки -0,5; 0; 0,5; штриха. Повторяя их циклично должны получить иллюзию движущейся обводки.
Для плавной анимации таймер не годится.
Записан
Гугль в помощь
Bepec
Гость
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #4 :
Сентябрь 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.
...
Как так не годится, если оно им управляется?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #5 :
Сентябрь 03, 2014, 11:10 »
Цитата: navrocky от Сентябрь 03, 2014, 08:39
Для анимации сделай у объекта рамки численное свойство смещение штриха и анимируй его с помощью QPropertyAnimation.
Интересно каким образом для QGraphicsItem можно задействовать QPropertyAnimation
Записан
Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #6 :
Сентябрь 03, 2014, 11:12 »
Кстати да, оно ж вроде не от QObject'a, не?
PS пока вижу вариант что рамкой управлять будет сцена через всё таки таймер
«
Последнее редактирование: Сентябрь 03, 2014, 11:28 от Bepec
»
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #7 :
Сентябрь 03, 2014, 11:48 »
Цитата: GreatSnake от Сентябрь 03, 2014, 11:10
Цитата: navrocky от Сентябрь 03, 2014, 08:39
Для анимации сделай у объекта рамки численное свойство смещение штриха и анимируй его с помощью QPropertyAnimation.
Интересно каким образом для QGraphicsItem можно задействовать QPropertyAnimation
Элементарно:
Код
C++ (Qt)
class
MyItem
:
public
QObject
,
public
QGraphicsItem
Или использовать QGraphicsObject.
Или использовать QVariantAnimation.
Преимущество анимационного движка перед обычным таймером заключается в том, что он рисует с максимальной возможной плавностью, тики анимации синхронизированны между всеми объектами анимаций, текущее состояние анимированного значения правильно интерполируется по шкале времени (возможно коряво выразился, но смысл, что это не просто инкремент на единичку по тику таймера).
На мой взгляд, анимации надо делать специализированными механизмами, которые присутствуют в Qt, а не городить велосипеды.
Записан
Гугль в помощь
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #8 :
Сентябрь 03, 2014, 11:52 »
Цитата: navrocky от Сентябрь 03, 2014, 11:48
На мой взгляд, анимации надо делать специализированными механизмами, которые присутствуют в Qt, а не городить велосипеды.
Присутствующие в Qt механизмы не подходят для QGraphicsItem.
То, что предлагается выше иначе как "городить велосипеды" не назовёшь
Записан
Qt 5.11/4.8.7 (X11/Win)
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #9 :
Сентябрь 03, 2014, 12:00 »
Цитата: GreatSnake от Сентябрь 03, 2014, 11:52
Цитата: navrocky от Сентябрь 03, 2014, 11:48
На мой взгляд, анимации надо делать специализированными механизмами, которые присутствуют в Qt, а не городить велосипеды.
Присутствующие в Qt механизмы не подходят для QGraphicsItem.
То, что предлагается выше иначе как "городить велосипеды" не назовёшь
Не согласен.
Уже много лет использую анимацию для анимирования элементов сцены, всё плавно и красиво. А если надо будет Easing Curve применить, как будете на таймере это городить? Возможно в рамках задачи ТС это и не нужно, но помимо рамки с муравьями есть и другие применения. К примеру, на схеме может плавно появляться новый элемент, или его перемещение можно заанимировать и т.д.
QVariantAnimation - универсальна, её можно применять ко всему чему угодно а не только к наследнику от QObject.
Записан
Гугль в помощь
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #10 :
Сентябрь 03, 2014, 12:39 »
Цитата: navrocky от Сентябрь 03, 2014, 12:00
QVariantAnimation - универсальна, её можно применять ко всему чему угодно а не только к наследнику от QObject.
Да, согласен.
Записан
Qt 5.11/4.8.7 (X11/Win)
Crazy Sage
Гость
Re: Анимированная подсветка объекта на QGraphicsScene в Qt4.
«
Ответ #11 :
Сентябрь 03, 2014, 12:58 »
Спасибо за советы. Правда как оказалось я не учёл, что Qt у меня строго не старше 4.4.2, там этих классов ещё не было.
Придётся делать таймер. Хотя на будущее всё равно запомню про эти варианты.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...