Qt 更改QGraphicscene插入顺序而不重新加载

Qt 更改QGraphicscene插入顺序而不重新加载,qt,Qt,我正在开发一个图形形状编辑器,它使用qgraphicscene/QGraphicsView作为基础。我对场景/视图框架有很多经验,并且对它有相当好的理解。我遇到的问题是QGraphicscene::items总是以插入顺序(升序或降序)返回项,而不管Z顺序或QGraphicsSitem::stackBefore调用的使用 问题是,与大多数图形编辑器一样,我需要能够按照堆叠顺序向前或向后移动形状。最后,为了保存结果数据,我必须遍历场景中的项目列表,并以我使用的任何格式保存每个项目的数据 我发现要做

我正在开发一个图形形状编辑器,它使用qgraphicscene/QGraphicsView作为基础。我对场景/视图框架有很多经验,并且对它有相当好的理解。我遇到的问题是QGraphicscene::items总是以插入顺序(升序或降序)返回项,而不管Z顺序或QGraphicsSitem::stackBefore调用的使用

问题是,与大多数图形编辑器一样,我需要能够按照堆叠顺序向前或向后移动形状。最后,为了保存结果数据,我必须遍历场景中的项目列表,并以我使用的任何格式保存每个项目的数据

我发现要做到这一点的唯一方法是,我必须从场景中移除项目,然后按照所需的堆叠顺序重新插入它们。在这个特定的任务中,它只包含少量的项,并且没有明显的延迟,但是在相关的编辑器中,它可能有数千项

虽然QGraphicsSitem::zValue和QGraphicsSitem::stackBefore允许我影响绘图顺序,但它们都不会更改从QGraphicscene::items返回的顺序。由于我最终保存的数据需要反映图形顺序,因此我必须删除并重新插入,以在最后获得正确的顺序

问题:

  • 我是否忽略了在场景中管理项目的任何其他技术,这些技术会影响QGraphicsItem::items的结果
  • 或者是否有其他方法可以遍历场景中的项目,从而获得绘图顺序

我可以确认
qgraphicscene::items()
items(sortOrder)
以原始创建和堆叠顺序返回项目列表,这与文档完全不一致

然而,我发现通过使用

qgraphicscene::items(qgraphicscene::itemsBoundingRect,Qt::intersectsitembounddirect,sortOrder)
我确实以正确的绘图顺序获取了项目,因此此函数显然考虑了对
qgraphicscene::stackBefore()
的调用


我没有使用
z-order
功能,因此我无法评论这在这种情况下是否有效。

这不是
qgraphicscene::items()
的功能吗?不,正如我所说,qgraphicscene::items总是以插入顺序返回。QGraphicsSitem::stackBefore和QGraphicsSitem::setZValue所做的更改不会影响QGraphicscene::items的性能。有趣的是,文档中说它可以做到这一点。它说的是“堆叠顺序”,但在使用stackBefore更改堆叠顺序后,这不是我得到的结果。我输入了一些调试代码来转储前后的项目列表,并且在这两种情况下列表的顺序相同。不幸的是,由于这个任务,我必须让列表按正确的堆叠顺序排列。我发现的唯一方法是删除项目并按所需顺序重新插入它们。谢谢——我必须运行一些测试,看看是否也包括z顺序。感谢你的回答。