Russian Qt Forum
Февраль 10, 2012, 15:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsItem - можно ли всегда абсолютные координаты и родительские отношения?  (Прочитано 1136 раз)
Гурман
Крякер
****
Offline Offline

Сообщений: 396


« : Июль 28, 2010, 08:56 »

при установке отношений parent-child между объектами класса QGraphicsItem, детки размещаются в системе координат родителей

в моем случае это порождает ряд неудобств, поскольку на сцене могут быть как родители верхнего уровня, у которых система координат сцены, так и их детки, причем с точки зрения редактирования и отображения ни детки, ни родители ничем не отличаются - поэтому мне гораздо удобнее рисовать все объекты в системе координат сцены

но... очень желательно иметь родительские отношения между графическими объектами, поскольку при некоторых операциях это оказывается удобно, в частности, при подсветке (при наведении курсора на дитя, дополнительно подсвечивается и его родитель)

можно ли как-то "переключить" Qt, чтобы он стал работать с детьми в системе координат сцены, но позволял устанавливать родительские отношения средствами Qt, или нет другого варианта, кроме как эти отношения устанавливать и отслеживать мне самостоятельно? вариант с умолчательными родительскими отношениями, при которых используется метод, возвращающий координаты в сцене, не годится, код получается дурацкий, поскольку надо не только получать координаты, но и размещать объекты в сцене

если бы можно было бы размещать детей в абсолютных координатах сцены, это было бы тоже хорошо, что-нибудь типа setScenePos вместо просто setPos
Записан
SimpleSunny
Крякер
****
Offline Offline

Сообщений: 357


Малевич


« Ответ #1 : Июль 28, 2010, 09:39 »

mapFromScene / mapToScene должны помочь

Код
C++ (Qt)
setScenePos(const QPointF & pos)
{
   if (!parentItem())
   {
        setPos(pos);
        return;
   }
 
   setPos(parentItem()->mapFromScene(pos));
}
Записан

"There must have been a moment at the beginning, where we could have said no. But somehow we missed it. Well, we'll know better next time." ©
Гурман
Крякер
****
Offline Offline

Сообщений: 396


« Ответ #2 : Июль 28, 2010, 10:41 »

Цитировать
mapFromScene / mapToScene должны помочь

надо посмотреть, я этот метод не заметил

правда тут все равно небольшой косяк получается, поскольку в детях сохраняются относительные координаты, и каждый раз при получении надо их пересчитывать в абсолютные

то есть, насколько я понял, возможности один раз переключить Qt на абсолютные координаты нет? ладно, будем думать...
« Последнее редактирование: Июль 28, 2010, 10:44 от Гурман » Записан
Гурман
Крякер
****
Offline Offline

Сообщений: 396


« Ответ #3 : Июль 29, 2010, 11:06 »

Цитировать
setPos(parentItem()->mapFromScene(pos));

хехе... предложенное решение влоб не подходит, так как получается "координатный парадокс родителей": если сначала пытаться установить координаты при помощи такого вызова, то еще не известно, кто родитель, а если пытаться установить сначала родителя, то это... невозможно сделать, поскольку не установлены координаты и родителя нельзя определить

в результате приходится извращаться, давать "предварительные координаты", и код все-равно получается не очевидный

красиво и легко понятно было бы, если бы можно было оперировать айтемами, не глядя на родительские отношения

может в Нокию фичериквест написать?...

Записан
Гурман
Крякер
****
Offline Offline

Сообщений: 396


« Ответ #4 : Июль 30, 2010, 15:12 »

брррр.... надо таки еще иметь и отношения родитель-дитя, с использованием координат детей в системе координат родителей

то есть, получаются в одном приложении сочетания и абсолютных координат, и относительных, у одниих и тех же объектов, в результате довольно хреново все...

если бы можно было одним вызовом переключать Qt на работу с абсолютными или относительными коорднатами, было бы здорово
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.073 секунд. Запросов: 22.