QGraphicsScene, передвижения элементов. |
Здравствуйте, гость ( Вход | Регистрация )
QGraphicsScene, передвижения элементов. |
Phoenix_nsk |
5.5.2011, 19:31
Сообщение
#1
|
Студент Группа: Участник Сообщений: 57 Регистрация: 12.3.2011 Пользователь №: 2491 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть сцена, на ней есть элементы, некоторые двигать можно, некоторые нет, которые можно двигать - нужно ограничить в области их передвижения.
Как это лучше реализовать? Как вообще контролировать передвижение элементов на сцене? Я переопределил метод из QGraphicsView, в тестовом варианте это выглядит так:
Подскажите, пожалуйста с какой стороны вообще подойти к передвижению элементов? Суть такова: Есть модель маятника, можно установить его начальное положение перетащив грузик, при этом угол поворота этого грузика ограничен, а так же при перемещении его должно сохраняться расстояние между точкой подвеса и грузом, т.е. по окружности движение, для этого надо пересчитывать координаты. Сообщение отредактировал Phoenix_nsk - 6.5.2011, 19:24 |
|
|
Litkevich Yuriy |
6.5.2011, 7:09
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Я переопределил метод из QGraphicsScene void SetModelView:: пишешь что метод сцены переопределил, а название класса содержит "Представление"В итоге приложение вылетает Segmentation fault логично, ведь ты не проверяешь есть ли вообще элемент в данных координатах itemAt(event->pos()). А сразу вызываешь метод.
|
|
|
Phoenix_nsk |
6.5.2011, 19:27
Сообщение
#3
|
Студент Группа: Участник Сообщений: 57 Регистрация: 12.3.2011 Пользователь №: 2491 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я переопределил метод из QGraphicsScene void SetModelView:: пишешь что метод сцены переопределил, а название класса содержит "Представление"В итоге приложение вылетает Segmentation fault логично, ведь ты не проверяешь есть ли вообще элемент в данных координатах itemAt(event->pos()). А сразу вызываешь метод.Поправил замечания. Да меня уже конкретно клинит на этом. Из-за того что не могу сделать адекватные передвижения элементов - не могу двигаться дальше. Как лучше подойти к вопросу передвижения элементов? Там ещё преобразовывать систему координат надо, что-то она тоже не работает у меня как надо. Я в печали. =((( |
|
|
Phoenix_nsk |
6.5.2011, 20:22
Сообщение
#4
|
Студент Группа: Участник Сообщений: 57 Регистрация: 12.3.2011 Пользователь №: 2491 Спасибо сказали: 0 раз(а) Репутация: 0 |
Размер сцены взят из размеров виджета, его размеры не изменяются.
Вывод сцены происходит на этот же самый виджет, получаетсякак-то так:
Дальше добавляются элементы на сцену. После чего начинается просмотр сцены. Движения элементов на сцене реализованы так:
Движение происходит, но элементы сильны сдвинуты относительно положения курсора вниз и вправо. Неправильно идёт преобразование координат. |
|
|
Phoenix_nsk |
7.5.2011, 16:29
Сообщение
#5
|
Студент Группа: Участник Сообщений: 57 Регистрация: 12.3.2011 Пользователь №: 2491 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да чё такое то, народ?
Тема сложная или чё; просмотры есть, ответов/советов - НЕТ??? |
|
|
ufna |
7.5.2011, 18:12
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
тема.. как бэ элементарная, уже на все ответили
тебе передвижение надо ограничить? Дак ограничь. Зачем ты его сразу двигаешь? Точка у тебя есть "куда пользователь мышь увел", прямоугольники, которым ограничиваешь - тоже должен быть. Теперь найди близжайшую точку, лежащую на этом прямоугольнике, и двигай его туда. Это будет шаг 1. Когда его сделаешь, пиши, подскажу как ограничить весь элемент, а не его pivot point. |
|
|
Phoenix_nsk |
7.5.2011, 18:28
Сообщение
#7
|
Студент Группа: Участник Сообщений: 57 Регистрация: 12.3.2011 Пользователь №: 2491 Спасибо сказали: 0 раз(а) Репутация: 0 |
На самое главное не ответили - координаты которые получаются от мыши не соответствуют координатам на сцене, элемент тащится вдалеке от указателя.
|
|
|
ufna |
7.5.2011, 18:53
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
а зачем по View то ловишь? Лови в самом айтеме или мапай его не к сцене, а к вью.
|
|
|
Phoenix_nsk |
7.5.2011, 19:08
Сообщение
#9
|
Студент Группа: Участник Сообщений: 57 Регистрация: 12.3.2011 Пользователь №: 2491 Спасибо сказали: 0 раз(а) Репутация: 0 |
Можно примеры?
Реально, уже второй раз с преобразованиями системы координат и второй раз проколы, ни один из описанных в документации методов (map***) адекватно не работает. Если я выложу весь проект, то сможете подсказать что конкретно туда вписать? Сообщение отредактировал Phoenix_nsk - 7.5.2011, 19:12 |
|
|
ufna |
7.5.2011, 19:13
Сообщение
#10
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
Выкладывайте, посмотрим.
|
|
|
Текстовая версия | Сейчас: 26.12.2024, 16:46 |