我正在制作分形创建软件。所以我需要每个分形一个场景,这些场景需要“分层”,因为缩放橡皮筋。
我已经尝试用“widget”方式编写它,所以我有一个名为“canvas”的自定义小部件。在我的canvas类中,我重写了paintEvent,在这个事件中,我呈现了当前的分形。每当有人用另一个分形点击菜单时,我调用了update()方法并渲染了新的分形。为了缩放我使用了覆盖鼠标事件和画布的update()。我第一次重画整个画布,但速度非常慢。在那之后我只重画了橡皮筋下面的那个部分,但是当我想要重新选择一些更大的区域和其他问题时,它仍然很慢。
所以我寻找另一种方法来做到这一点。层。我找到了QStackedWidget,但是我找不到如何使我的两个图层和顶部图层可见透明的方法。之后,我发现了QGraphicsScene,这似乎是最好的方法。但我不知道这样做的正确程序。以下是我正在考虑的两个程序:
或:
我的推理之一是否正确?你还有别的建议吗?分形在计算中很复杂,只有在必要时重绘才是非常重要的。你能帮帮我吗?
谢谢: - )
编辑:“缩放橡皮筋”解释:
对不起我的表达“缩放橡皮筋”。这意味着缩放(缩放)橡皮筋所做选择区域下方的区域 - 以与Photoshop CS5相同的方式缩放(例如)。而且我想知道在选择这种方式时场景的哪个部分被重新绘制。如果有重新绘制的整个场景,或者所选区域下方的场景部分,或者没有重新绘制,橡皮筋选择在单独的层中完成。
我希望我的解释有所帮助: - )。
答案 0 :(得分:0)
在Qt中,QGraphicsScene可以被认为是一个物品世界,QGraphicsView作为进入那个世界的窗口。因此,您应该根据QGraphicsItem(或QGraphicsObject,如果您需要信号和插槽)向QGraphicsScene添加项目。
在您的情况下,我将创建一个继承自QGraphicsItem的Fractal类并将其添加到场景中。确保覆盖必要的纯虚函数,例如boundingRect和paint。
不要计算绘画函数中的分形代码。我建议Fractal类存储一个QPixmap(如果你在像素级别绘制,则存储QImage)并将分形图呈现给它。然后在paint函数中,Fractal类将通过调用painter->drawImage或painter->drawPixmap来呈现QPixmap的内容;在这种情况下以相关者为准。
对于缩放,您的Fractal类可以响应缩放,适当地更改内部表示的渲染。