Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Гурман от Июль 28, 2010, 08:56



Название: QGraphicsItem - можно ли всегда абсолютные координаты и родительские отношения?
Отправлено: Гурман от Июль 28, 2010, 08:56
при установке отношений parent-child между объектами класса QGraphicsItem, детки размещаются в системе координат родителей

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

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

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

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


Название: Re: QGraphicsItem - можно ли всегда абсолютные координаты и родительские отношения?
Отправлено: SimpleSunny от Июль 28, 2010, 09:39
mapFromScene / mapToScene должны помочь

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


Название: Re: QGraphicsItem - можно ли всегда абсолютные координаты и родительские отношения?
Отправлено: Гурман от Июль 28, 2010, 10:41
Цитировать
mapFromScene / mapToScene должны помочь

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

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

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


Название: Re: QGraphicsItem - можно ли всегда абсолютные координаты и родительские отношения?
Отправлено: Гурман от Июль 29, 2010, 11:06
Цитировать
setPos(parentItem()->mapFromScene(pos));

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

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

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

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



Название: Re: QGraphicsItem - можно ли всегда абсолютные координаты и родительские отношения?
Отправлено: Гурман от Июль 30, 2010, 15:12
брррр.... надо таки еще иметь и отношения родитель-дитя, с использованием координат детей в системе координат родителей

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

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