【问题标题】:Super-imposing Scenes with QGraphicsView使用 QGraphicsView 的超级壮观场景
【发布时间】:2012-01-08 09:30:53
【问题描述】:

我还是一个 PyQt 新手 - 我有一个 QGraphicsView 可以显示 3 个不同的 QGraphicScene - 它们是使用字典切换的。

class MyScenes:

    def _initScenes(self):          
        self._viewer=QGraphicsView()
        self._sinScene=QGraphicScene()
        self._cosScene=QGraphicScene()
        self._tanScene=GraphicScene()
        self._scenes={'sin':self._sinScene,'cos':self._cosScene,'tan':self._tanScene}

    def _showScene(self,ID):            
        self._viewer.setScene(self.scenes[ID])  

我想实现一个选项,该选项将显示 3 个相互叠加的场景 - 不是一次一个 - 我该怎么做?我需要 3 个视图吗?视图可以显示多个透明场景吗?看了一圈,没找到答案。

你可以用 Python 或 C++ 回答——只要它在 PyQt4 中工作。

TIA

【问题讨论】:

    标签: qt python-3.x pyqt qgraphicsview qgraphicsscene


    【解决方案1】:

    由于场景是作为分层树处理的,因此您可以在单个 QGraphicsScene 内创建 3 个 QGraphicsItems 而不是 3 个 QGraphicsScenes
    然后您将添加当前在您的 sin/cos/tan“图表”/“子场景”中的项目作为这 3 个顶级项目之一的子项目。

    【讨论】:

    • 将需要大量的重新设计 - 我正在使用 QGraphicScene.addLine() 进行绘图 - 似乎我必须在较低级别重新实现所有内容才能使用 QGraphicsItem - 但也许这是我的错误我第一次做错了,但似乎应该有更好的方法。
    • @Mikey:如果您在代表顶级项目的QGraphicsItem 派生类中编写addLine 方法,则无需更改较低级别的任何内容。
    • 我猜你的意思是包装它并将它传递给场景对象 - 会尝试 - 正如我所说,PyQt 还是新的,还没有使用更抽象的类。
    • 我尝试为 3 个场景设置 3 个视图,但它们相互覆盖 - 但我认为设置一个paintEvent 以呈现透明也可以。
    猜你喜欢
    • 2021-12-09
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    相关资源
    最近更新 更多