我对以下问题感到困扰:
我正在使用QGraphicsScene
需要根据用户的操作呈现 SQL 查询的图形表示的交互式交互,例如:向查询中添加某些内容(表、新列、其他内容)或从查询中删除某些内容(关键字、表格、列...)。场景的变化必须在操作后显示出来,应用程序的“逻辑层”也需要跟踪用户所做的操作,因为查询的“渲染”是由“逻辑”层完成的(即: “逻辑层”创建所有QGraphicsItemGroup
派生对象,在构建所有逻辑层组件之后,这些派生对象将被添加到查询的图形场景中并放在窗口上)。
发生的问题如下:现在我没有找到任何可用的解决方案来以最平滑的方式在更改后呈现查询。
请允许我在屏幕截图中链接以进行进一步说明:
假设用户想要PERSON.NAME
从查询中删除该列。应用程序中会发生什么:
- 用户单击
PERSON.NAME
列图形项的“删除”(列名后的红色小 X)按钮 - Graphics View 感知到这个操作,将 REMOVE 列从图形系统发送到“逻辑层”(“模型”)
- 逻辑层依次删除代表
PERSON.NAME
列的相应“逻辑层”对象,
麻烦从这里开始:
- 整个图形(是的,一切)由逻辑层重新渲染,为同一查询创建图形项,没有
PERSON.NAME
- 然后我必须创建一个新窗口,其中包含一个新
QGraphicsScene
对象和一个QGraphicsView
- 将表示查询的重新渲染对象的图形项(但现在没有
PERSON.NAME
列)插入新QGraphicsScene
的addItem()
- 现在用新窗口替换应用程序的中央小部件。
- 现在您可以看到,确实,在查询
PERSON.NAME
中不再存在,并且下面的所有图形元素都PERSON.NAME
在屏幕上向上移动。
显然这不是一个好的解决方案,当我改变窗口时有一个难看的闪烁,但我直到现在都没有找到更好的解决这个问题的方法。
因此,我请求您的帮助,以确定可以对这种在删除(添加)新元素时更新屏幕的方法进行哪些改进,这些新元素知道上面的背景信息,而无需新窗口。显然,也欢迎其他与 mroe 通用图形相关的评论。
谢谢,f