Один из вариантов может заключаться в реализации вашего собственного класса, производного от QGraphicsScene
, который может затем визуализировать вторую 'фоновую' сцену в ее drawBackground
переопределении.
class graphics_scene: public QGraphicsScene {
using super = QGraphicsScene;
public:
using super::super;
void set_background_scene (QGraphicsScene *background_scene)
{
m_background_scene = background_scene;
}
protected:
virtual void drawBackground (QPainter *painter, const QRectF &rect) override
{
if (m_background_scene) {
m_background_scene->render(painter, rect, rect);
}
}
private:
QGraphicsScene *m_background_scene = nullptr;
};
Тогда использовать как ...
QGraphicsView view;
/*
* fg is the 'dynamic' layer.
*/
graphics_scene fg;
/*
* bg is the 'static' layer used as a background.
*/
QGraphicsScene bg;
bg.addText("Text Item 1")->setPos(50, 50);
bg.addText("Text Item 2")->setPos(250, 250);
fg.addText("Text Item 3")->setPos(50, 50);
fg.addText("Text Item 4")->setPos(350, 350);
view.setScene(&fg);
fg.set_background_scene(&bg);
view.show();
Я только выполнил базовое c тестирование, но, похоже, оно работает так, как ожидалось. Не уверен насчет возможных проблем с производительностью.