问题所在,我的UI上有一个QGraphicsView。我已经创建了一个将图像放到QGraphicsView上的函数:
// Read New Image from file
QImage image(":/images/myFile.png");
/// Declare a pointer to a scene
QGraphicsScene *scene = new QGraphicsScene();
// add a pixmap to the scene from the QImage 'image'
scene->addPixmap(QPixmap::fromImage(image));
// set the scene to equal the height and width of the map image
scene->setSceneRect(0,0,image.width(),image.height());
// Set the Scene to the GraphicsView on the UI
ui->graphicsView->setScene(scene);
但是现在我希望能够在图像上以特定的X Y值绘制点。我有一个很好地完成这个功能的功能然而,只要这个功能被调用所有点出现并且图片消失:(。我知道这是因为我将场景再次设置为带点的那个,所以程序刚刚得到摆脱当前使用的那个(图像一个)
for(unsigned int i = 0; i < pixels.size(); i++)
{
x = pix_iter->second;
y = pix_iter->first;
scene->addEllipse(x, y, 1, 1, pen, QBrush(Qt::SolidPattern));
pix_iter++;
}
ui->graphicsView->setScene(scene);
无论如何我不知道如何更新场景以添加点而不是仅仅设置一个新的
任何帮助都会非常感激。
答案 0 :(得分:3)
在第二个片段中,您是否重新创建场景?为什么不使用ui->graphicsView->scene()
并为其添加点?
答案 1 :(得分:2)
只要您使用相同的场景指针操作,您可以根据需要多次调用setScene(尽管它不会改变任何内容)。因此,首先要理解的是QGraphicsScene实际上是QGraphicsView的模型,因此您要么全局声明它(取决于应用程序设计),要么使用scene()方法作为建议的先前答案。
为视图调用scene()当然是一种解决方案,但我更喜欢通过我自己的类而不是通过视图的方法来保持模型指针。多数民众赞成因为有些时候你想分享一个视图来显示不同的模型,具体取决于应用程序状态/逻辑。因此,如果必须将某些内容添加到场景中,您应该确定您正在使用哪个场景。