0

所以正如问题所说,我的用户界面上有一个 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);

但是现在我希望能够在图像上的特定 XY 值处绘制点。我有一个函数可以很好地做到这一点,但是一旦调用这个函数,所有的点就会出现并且图片消失了:(。我知道这是因为我再次将场景设置为带有点的场景,所以程序只是得到摆脱它当前使用的那个(图像之一)

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

无论如何,我不知道该怎么做才能更新场景以添加点,而不仅仅是设置一个新场景

任何帮助将非常感激。

4

2 回答 2

3

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

于 2013-04-18T08:20:19.943 回答
2

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

为视图调用 scene() 当然是一种解决方案,但我更喜欢通过我自己的类而不是通过视图的方法来保持模型指针可用。那是因为有时您希望共享视图以根据应用程序状态/逻辑显示不同的模型。因此,如果必须将某些内容添加到场景中,您应该确定您正在使用哪个场景。

于 2013-04-18T08:27:23.003 回答