Вопрос
Возьмите определенное дерево QGraphicsItems: QGraphicsRectItem, у которого в качестве дочерних элементов есть два QGraphicsTextItems.
QGraphicsRectItem CompositeObject;
QGraphicsTextItem text1;
QGraphicsTextItem text2;
text1.setParent(CompositeObject);
text2.setParent(CompositeObject);
Теперь возьмите QGraphicsScene с двумя QGraphicsRectItem в другой позиции:
QgraphicsScene scene;
QGraphicsRectItem* rect1 = scene.addRect(...);
QGraphicsRectItem* rect2 = scene.addRect(...);
rect1.setPos(0,0);
rect2.setPos(0,100);
Теперь я хочу, чтобы CompositeObject был дочерним от rect1 AND rect2; Моя цель: показать одно и то же поддерево QGraphicsItems в двух местах одной сцены, обрезанное родительским прямоугольником. Обновления в поддереве будут видны в двух местах в QGraphicsView без какой-либо ручной синхронизации или чего-либо подобного.
Решение, в котором я не уверен
Единственное, о чем я могу думать о том, как это сделать, - это встраивание двух QGraphicsViews в сцену с использованием прокси-виджета. Поддерево, которое я хочу видеть дублированным в моей сцене, будет другой отдельной сценой (subScene), и оба QGraphicsViews в моей основной сцене будут отображать subScene. Это, вероятно, сработает, но привнесет хорошие накладные расходы из-за прокси-виджета, который я не могу себе позволить, поскольку элементы в подсцене придется регулярно анимировать и обновлять.
QGraphicsScene subScene;
QGraphicsTextItem text1;
QGraphicsTextItem text2;
subScene.addItem(text1);
subScene.addItem(text2);
QgraphicsScene scene;
QgraphicsView view1(&subScene);
QgraphicsView view2(&subScene);
QGraphicsProxyWidget* proxy1 = scene.addWidget(&view1);
proxy1.setPos(0,0);
QGraphicsProxyWidget* proxy2 = scene.addWidget(&view2);
proxy2.setPos(0,100);
Есть ли другие варианты, как это сделать?