在QGraphicsView上添加多个QGraphicsScene



我正在创建一个GUI,用户需要在其中使用QGraphicsView进行交互。所以我现在正在做的是,我创建了QGraphicsScene并将其分配给QGraphicsView。

绘图应该有两层:一层是静态的,一层是动态的。

静态层应该有在启动时创建一次的对象,而动态层包含多个项目(可能有数百个(,用户将与动态层对象交互。

目前,我在同一个场景中绘制两个层,由于绘制了大量对象,这会产生一些滞后。

所以问题是:有没有办法将两个或多个QGraphicsScene分配给一个QGraphicsView?

一个选项可能是实现从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();

我只进行了基本的测试,但它的表现似乎和预期的一样。但不确定是否存在任何潜在的性能问题。

相关内容

  • 没有找到相关文章

最新更新