我创建了一个公共QGraphicsItem Node
类,它为与我的应用程序相关的一组属性提供了getter/setter方法。该应用程序是用户设计模型的图编辑器。这个Node
类用于填充也是公共QGraphicsScene Diagram
类。Qt - 使用自定义QGraphicsItems保存自定义QGraphicsScene
我现在试图在应用中实现一个加载/保存机制,使用户能够保存和重用模型 - 按照他们保存时的编辑方式进行编辑。我在计算如何解决这个问题时遇到了一些麻烦。
我已经知道我必须获取QGraphicsItem对象的相关属性并将它们保存到文件,然后在加载时使用我保存的数据重建场景。我的问题是:当我使用QGraphicsScene::items()
函数时,它返回一个QList<QGraphicsItem *>
。我能做些什么来让它返回QList<Node *>
?
如果我得到了我追加到场景中的所有节点的列表,我知道接下来要做什么。
我开始意识到我可能不得不在我的Diagram
类中重新实现items()
函数,但我希望能更轻松地摆脱它。在这种情况下,有人可以解释怎么做吗?
我忘了提及我也有一个公共的QGraphicsItem'Link'类。 'items()'方法也会返回这些实例。如果该项目是'Node'类,那么如何将代码调整为_test_?我不希望/不需要处理'Link'对象... – Joum
您可以通过为所有项目使用通用基类并从中继承您的'Node'和''Link'类来解决此问题。稍后,您可以使用'qgraphicsitem_cast'将其转换为该基类。我已经更新了代码来证明这一点。 – tomvodi
如果我没有弄错,从我在网上找到的,我的问题的_test_部分只是测试'if(graphicsItem!= 0)'。只有在转换后,'graphicsItem'不是'MyGraphicsItem'类型,对吗? – Joum