我有一个显示用于使用QGraphicsScene对象的图的编辑器的应用程序。我想创建一个只读版本相同的对话框,但有用户看到都在同一时间的能力。

SimScene* pScene1 = new SimScene(model);  // adds model to scene
SimScene* pScene2 = new SimScene(model);  // adds model to scene
QGraphicsView* pView1 = new QGraphicsView();
pView1->setScene(pScene2);
QGraphicsView* pView1 = new QGraphicsView();
pView2->setScene(pScene2);

当我创建QGraphicsScene的2个实例和对第二个它消除从第一个中的所有项目使用的addItem。 Qt的是否支持任何形式的场景模型之间共享?是我唯一的选择有相同的场景,并尝试自定义视图?后来一个似乎不工作,因为对象选择信息内共享的图形项目,所以如果我对他们的禁止标志,他们变成只有两个次点击浏览。任何建议表示赞赏。感谢。

有帮助吗?

解决方案

我认为你存储模型类QSceneItems。正因为如此pScene1和pScene2要分享不仅是模型本身,而且场景中的项目。这将无法工作,因为任何场景项只能在一个场景在任何特定时刻放置

如何解决呢?制作模型不知道任何GUI的。让它发出改变(的)通知,每当一些有趣的事情发生了。

然后让各SimScene涡卷模型成任何QSceneItems就是了,和处理()改变通知。

示例:

<强>型号: 图形, 边缘, 顶点结果 的 GUI SimScene, QEdge, QVertex, QSimInfo, Qbackground,等等...

其他提示

如果你只是想要一个互动和模型中的一个只读视图,你可以使用一个QGraphicsScene和2个QGraphicsViews。你只需要在其中一人叫的QGraphicsView :: setInteractive(假)。这样,你不必改变任何项目标志。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top