Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: li-frost от Март 30, 2011, 10:52



Название: QGraphicsPolygonItem - общие переменные
Отправлено: li-frost от Март 30, 2011, 10:52
Есть общий класс (к примеру А) наследованный от QGraphicsPolygonItem. В нем protected QPointF и QPolygon. Далее я наследую от этого класса (к примеру B, C) два других и в них уже рисую полигоны. Далее в главном окне программы создаю объекты классов B, C и добавляю их на сцену.

Вопрос: как сделать чтобы при смене позиции полигона созданного в классе B поменялись координаты и полигона C (т.е. произошла перерисовка полигона C)?


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: vintik от Март 31, 2011, 00:02
при смене позиции полигона созданного в классе B

Неплохо бы уточнить, что значит смена позиции полигона в классе B?
каким методом смена позиции будет делаться?
B->polygon()->translate(x,y);
или
B->setPos(x,y);


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: li-frost от Март 31, 2011, 07:02
В классе B setPos(x,y), вот как класс C при это перерисовать если некоторые точки у полигона B и C общие?


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: Igors от Март 31, 2011, 07:23
Не очень ясно что надо, но почему бы B и С не использовать указатели на общие данные (QPointF и QPolygon)


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: GreatSnake от Март 31, 2011, 08:02
Цитата: li-frost
Вопрос: как сделать чтобы при смене позиции полигона созданного в классе B поменялись координаты и полигона C (т.е. произошла перерисовка полигона C)?
А каким образом у вас B и C связаны между собой? Если я правильно понял, то общий у них только базовый класс.

Цитата: Igors
Не очень ясно что надо, но почему бы B и С не использовать указатели на общие данные (QPointF и QPolygon)
У каждого QGraphicsPolygonItem-а своя копия полигонов, поэтому просто шарить не получится.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: li-frost от Март 31, 2011, 08:05
Цитата: li-frost
Вопрос: как сделать чтобы при смене позиции полигона созданного в классе B поменялись координаты и полигона C (т.е. произошла перерисовка полигона C)?
А каким образом у вас B и C связаны между собой? Если я правильно понял, то общий у них только базовый класс.

Цитата: Igors
Не очень ясно что надо, но почему бы B и С не использовать указатели на общие данные (QPointF и QPolygon)
У каждого QGraphicsPolygonItem-а своя копия полигонов, поэтому просто шарить не получится.

Да, общий только базовый класс, может я вообще не так делаю. Пробовал через Глобальные переменные, но перерисовка идет если кликнуть по итему.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: Igors от Март 31, 2011, 08:21
У каждого QGraphicsPolygonItem-а своя копия полигонов, поэтому просто шарить не получится.
Да, и на мой взгляд - это сделано неудобно, часто надо рисовать те же данные но в разных окнах.
Глянул (бегло) исходники - того QGraphicsPolygonItem немного, может скопировать как свой класс и изменить что надо.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: GreatSnake от Март 31, 2011, 08:34
Цитировать
Глянул (бегло) исходники - того QGraphicsPolygonItem немного, может скопировать как свой класс и изменить что надо.
А зачем? Наследуешься от QGraphicsItem, перегружаешь boundingRect() и paint(), расшариваешь полигоны и вперёд. В принципе делов-то на 20 мин.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: li-frost от Март 31, 2011, 08:50
Цитировать
Глянул (бегло) исходники - того QGraphicsPolygonItem немного, может скопировать как свой класс и изменить что надо.
А зачем? Наследуешься от QGraphicsItem, перегружаешь boundingRect() и paint(), расшариваешь полигоны и вперёд. В принципе делов-то на 20 мин.

Да, скорее всего это наиболее верный путь.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: Igors от Март 31, 2011, 09:30
А зачем? Наследуешься от QGraphicsItem, перегружаешь boundingRect() и paint(), расшариваешь полигоны и вперёд. В принципе делов-то на 20 мин.
Ну так "родные" полигоны остаются (вектор) и где-то могут вылезти.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: GreatSnake от Март 31, 2011, 12:15
Цитировать
Ну так "родные" полигоны остаются (вектор) и где-то могут вылезти.
QGraphicsItem - абстрактый класс без всяких полигонов и т.д.


Название: Re: QGraphicsPolygonItem - общие переменные
Отправлено: vintik от Апрель 01, 2011, 16:36
Не забудьте, что setPos(x,y) меняет центр системы координат итема. А сами координаты полигона класса B при этом останутся неизменными(внутри класса).