在QGraphicsScene上绘画而不会丢失已经存在的图片。 Qt C ++

时间:2013-04-18 08:16:25

标签: c++ qt qgraphicsview

问题所在,我的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);

无论如何我不知道如何更新场景以添加点而不是仅仅设置一个新的

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

在第二个片段中,您是否重新创建场景?为什么不使用ui->graphicsView->scene()并为其添加点?

答案 1 :(得分:2)

只要您使用相同的场景指针操作,您可以根据需要多次调用setScene(尽管它不会改变任何内容)。因此,首先要理解的是QGraphicsScene实际上是QGraphicsView的模型,因此您要么全局声明它(取决于应用程序设计),要么使用scene()方法作为建议的先前答案。

为视图调用scene()当然是一种解决方案,但我更喜欢通过我自己的类而不是通过视图的方法来保持模型指针。多数民众赞成因为有些时候你想分享一个视图来显示不同的模型,具体取决于应用程序状态/逻辑。因此,如果必须将某些内容添加到场景中,您应该确定您正在使用哪个场景。