Рисование фигур внутри QGraphicsItem (parent) с позициями относительно родителя - PullRequest
1 голос
/ 01 января 2012

У меня есть свой собственный объект, реализующий QGraphicsItem - по сути, это просто квадрат с рамкой.Я пытаюсь нарисовать фигуры внутри этого элемента, используя его в качестве родителя.Проблема в том, что координаты, которые я использую для фигур в родительском элементе, относятся не к координатам родительского элемента, а к сцене.

Пример: я хочу нарисовать QGraphicsLineItem в моем QGraphicsItem (родительском).Родитель в 50,50, с размерами 20x20.Если я рисую линию с указанным родителем, используя координаты 0,0,20,20, он рисует в 0,0,20,20 относительно сцены, а не родителя.

Есть ли способзаставить линию (или любую другую фигуру) использовать положения относительно родителя, а не сцены?Или мне нужно будет вручную определить координаты, проверив родительские X и Y?

Ответы [ 3 ]

2 голосов
/ 02 января 2012

Как насчет того, чтобы каждый из ваших QGraphicsItem также наследовал от QObject и передавал каждому из них родительский элемент? *
Затем определите положение в сцене на основе родительских координат (рекурсивных):

class Scene(QGraphicsScene):

    def __init__(self):
        QGraphicsScene.__init__(self)

    def xpos(self):
        return 0

    def ypos(self):
        return 0


class RelativeItem(QGraphicsRectItem, QObject):

    def __init__(self, parent):
        QGraphicsRectItem.__init__(self)
        QObject.__init__(self, parent)

    def xpos(self):
        return self.scenePos().x() - self.parent().xpos()

    def ypos(self):
        return self.scenePos().y() - self.parent().ypos()

scene = QGraphicsScene()
obj1 = RelativeItem(scene)  # Relative to scene
obj2 = RelativeItem(obj1)  # Relative to obj1

xpos() и ypos() рекурсивно вызывает xpos() и ypos() родителя (сцена жестко закодирована в (0, 0)) и вычитает его из позиции объекта в сцене.Это означает, что две функции возвращают позиции x и y объекта относительно родителя.

1 голос
/ 02 января 2012

Вы пытались использовать QGraphicsItem::setParentItem и ссылаться на QGraphicsItem::parentItem при настройке позиции QGraphicsLineItem?

1 голос
/ 02 января 2012

Единственное, что мне приходит в голову, это использовать QGraphicsItem::mapToScene на родительском элементе перед установкой координаты рисования дочернего элемента.

...