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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsPolygonItem - общие переменные  (Прочитано 5517 раз)
li-frost
Гость
« : Март 30, 2011, 10:52 »

Есть общий класс (к примеру А) наследованный от QGraphicsPolygonItem. В нем protected QPointF и QPolygon. Далее я наследую от этого класса (к примеру B, C) два других и в них уже рисую полигоны. Далее в главном окне программы создаю объекты классов B, C и добавляю их на сцену.

Вопрос: как сделать чтобы при смене позиции полигона созданного в классе B поменялись координаты и полигона C (т.е. произошла перерисовка полигона C)?
Записан
vintik
Гость
« Ответ #1 : Март 31, 2011, 00:02 »

при смене позиции полигона созданного в классе B

Неплохо бы уточнить, что значит смена позиции полигона в классе B?
каким методом смена позиции будет делаться?
B->polygon()->translate(x,y);
или
B->setPos(x,y);
Записан
li-frost
Гость
« Ответ #2 : Март 31, 2011, 07:02 »

В классе B setPos(x,y), вот как класс C при это перерисовать если некоторые точки у полигона B и C общие?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 31, 2011, 07:23 »

Не очень ясно что надо, но почему бы B и С не использовать указатели на общие данные (QPointF и QPolygon)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Март 31, 2011, 08:02 »

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

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

Qt 5.11/4.8.7 (X11/Win)
li-frost
Гость
« Ответ #5 : Март 31, 2011, 08:05 »

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

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Март 31, 2011, 08:21 »

У каждого QGraphicsPolygonItem-а своя копия полигонов, поэтому просто шарить не получится.
Да, и на мой взгляд - это сделано неудобно, часто надо рисовать те же данные но в разных окнах.
Глянул (бегло) исходники - того QGraphicsPolygonItem немного, может скопировать как свой класс и изменить что надо.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Март 31, 2011, 08:34 »

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

Qt 5.11/4.8.7 (X11/Win)
li-frost
Гость
« Ответ #8 : Март 31, 2011, 08:50 »

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

Да, скорее всего это наиболее верный путь.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 31, 2011, 09:30 »

А зачем? Наследуешься от QGraphicsItem, перегружаешь boundingRect() и paint(), расшариваешь полигоны и вперёд. В принципе делов-то на 20 мин.
Ну так "родные" полигоны остаются (вектор) и где-то могут вылезти.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Март 31, 2011, 12:15 »

Цитировать
Ну так "родные" полигоны остаются (вектор) и где-то могут вылезти.
QGraphicsItem - абстрактый класс без всяких полигонов и т.д.
Записан

Qt 5.11/4.8.7 (X11/Win)
vintik
Гость
« Ответ #11 : Апрель 01, 2011, 16:36 »

Не забудьте, что setPos(x,y) меняет центр системы координат итема. А сами координаты полигона класса B при этом останутся неизменными(внутри класса).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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