Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Qt中的两个qgraphicsecene实例中共享同一模型_Qt_Qgraphicsview - Fatal编程技术网

在Qt中的两个qgraphicsecene实例中共享同一模型

在Qt中的两个qgraphicsecene实例中共享同一模型,qt,qgraphicsview,Qt,Qgraphicsview,我有一个应用程序,它使用qgraphicscene对象显示图表编辑器。我想创建一个只读版本的同一个对话框,但有能力让用户看到这两个在同一时间 SimScene* pScene1 = new SimScene(model); // adds model to scene SimScene* pScene2 = new SimScene(model); // adds model to scene QGraphicsView* pView1 = new QGraphicsView(); pVie

我有一个应用程序,它使用qgraphicscene对象显示图表编辑器。我想创建一个只读版本的同一个对话框,但有能力让用户看到这两个在同一时间

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);

当我创建两个QGraphicscene实例并在第二个实例上使用addItem时,它会从第一个实例中删除所有项目。Qt是否支持场景之间的模型共享?我唯一的选择是使用相同的场景并尝试自定义视图吗?后面的一个似乎不起作用,因为对象选择信息在共享的图形项目中,所以如果禁用它们上的标志,它们在两个视图中都将成为只读。任何建议都将不胜感激。谢谢。

我认为您正在模型类中存储QSceneItems。因为pScene1和pScene2不仅尝试共享模型本身,还尝试共享场景项目。这将不起作用,因为没有任何场景项

如何修复它?使模型不知道任何GUI。每当发生有趣的事情时,让它发出changed()通知

然后,让每个SimScene将模型包装到它想要的QSceneItems中,并处理changed()通知

例如:

型号: 图表 边缘, 顶点
GUI 辛森, 基奇, QVertex, QSimInfo, Qbackground等等。。。

我认为您正在模型类中存储QSceneItems。因为pScene1和pScene2不仅尝试共享模型本身,还尝试共享场景项目。这将不起作用,因为没有任何场景项

如何修复它?使模型不知道任何GUI。每当发生有趣的事情时,让它发出changed()通知

然后,让每个SimScene将模型包装到它想要的QSceneItems中,并处理changed()通知

例如:

型号: 图表 边缘, 顶点
GUI 辛森, 基奇, QVertex, QSimInfo, Qbackground等等。。。

如果您只想在模型上显示一个交互式只读视图,可以使用一个QGraphicscene和两个QGraphicsView。只需对其中一个调用QGraphicsView::setInteractive(false)。这样,您就不必更改任何项目标志。

如果您只想在模型上创建一个交互式只读视图,您可以使用一个QGraphicsCenter和两个QGraphicsView。只需对其中一个调用QGraphicsView::setInteractive(false)。这样,您就不必更改任何项目标志。

此外,您还可以添加两次pScene2:

...
pView1->setScene(pScene2);
...
pView2->setScene(pScene2);

此外,还要添加两次pScene2:

...
pView1->setScene(pScene2);
...
pView2->setScene(pScene2);

你是对的。现有系统将模型项作为GUI项,这就是为什么在添加到第二个场景时,它们最终会从第一个场景中删除。我会试着把它们分开。谢谢,你说得对。现有系统将模型项作为GUI项,这就是为什么在添加到第二个场景时,它们最终会从第一个场景中删除。我会试着把它们分开。谢谢