Russian Qt Forum
Май 05, 2024, 12:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Июль 28, 2010, 08:56 »

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

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

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

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

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

2^7-1 == 127, задумайтесь...
SimpleSunny
Гость
« Ответ #1 : Июль 28, 2010, 09:39 »

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

Код
C++ (Qt)
setScenePos(const QPointF & pos)
{
   if (!parentItem())
   {
        setPos(pos);
        return;
   }
 
   setPos(parentItem()->mapFromScene(pos));
}
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Июль 28, 2010, 10:41 »

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

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

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

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

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #3 : Июль 29, 2010, 11:06 »

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

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

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

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

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

Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Июль 30, 2010, 15:12 »

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

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

если бы можно было одним вызовом переключать Qt на работу с абсолютными или относительными коорднатами, было бы здорово
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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