Таймлайн из QGraphicsView
Всем привет, есть у кого нибудь пример кода или какие либо подсказки.
Я пытаюсь сделать что-то вроде таймлайна с помощью QGraphicsView. Допустим у меня есть некие сцены, они будут QGraphicsRectItem. Есть несколько вопросов:
- Есть ли возможность запретить айтемам накладываться друг на друга, даже если перетаскивается несколько айтемов? То есть если айтем уперся в другой, то дальше двигать сцену или несколько выделенных сцен нельзя, пока не будет достаточно свободного места на конкретной линии
- Как лучше сделать изменение длительности этих "сцен", то есть изменение размеров айтемов?
- Время у сцен рассчитывается на прямую от
позиции и размеров, то есть
item->pos().x()это начало сцены иitem->rect().width()это длительность в миллисекундах, из за этого скругление сцен выглядит плохо, его почти нет, так же из за того что фон длительностью в 15с это айтем шириной 15000 подписи к шкале времени не видно, что можно сделать с этим? - Почему может не работать масштабирование по колесику мыши, хочу сделать только по x, то есть
scale(scalefactor, 1);но так не работает.
Как то так это выглядит сейчас, в методе itemChange сделал установку линии для сцены, это работает хорошо
и есть еще один не отвеченный вопрос, помогите пожалуйста, если кто знает
Ответы (1 шт):
Да, можно отслеживать столкновение между итемами при помощи вот этих функций: QGraphcisItem::collidesWithItem, QGraphicsItem::boundingRect (может быть и эта QGraphicsItem::shape)
При старте редактирования создавать вами написанный специальный итем-редактор (с соответствующими функциями редактирования, например, рамкой), которому передавать редактируемый итем. При окончании редактирования этот итем-редактор удалять
Хм, хотя проблем с этим быть не должно, но например, отказаться от скругления на данном этапе разработки, как несущественного украшательства (и вернуться позже, когда все основные функции будут готовы). Насчет подписей, можно их выводить не внутри, а вне (например сверху, или снизу)
Может быть это поможет
з.ы. по тому вопросу готовил ответ, но текучка отвлекла - там у вас не все так просто как кажется и сформулировали немного путано