QGraphicsView在打开文件对话框后显示工件

时间:2013-12-08 16:38:19

标签: qt qgraphicsview qimage qpixmap

我对Qt的内存模型并不十分熟悉,特别是在图像处理方面。我创建了一个空白像素图并将其添加到QGraphicsView的场景中。这似乎可以在两种尺寸之间正确跳转,但我注意到如果我打开QFileDialog(beforeafter),我会得到调用此函数的图形工件。这些工件在实际视图中,因为我可以平移并且它们保持存在。 QFileDialog在屏幕上弹出的位置似乎并不重要,我仍然会遇到这些问题。

我需要做些什么来手动重新渲染图像的这一部分,或者我可能在代码的其他地方遇到更严重的问题?

void RenderView::setViewport(int width, int height)
{
    if (_viewportOverlay != 0)
        scene()->removeItem(_viewportOverlay);

    const int BORDER = VIEWPORT_BORDER;
    QImage image(width+BORDER*2,height+BORDER*2, QImage::Format_ARGB32);
    QPixmap pixmap = QPixmap::fromImage(image);

    _viewportOverlay = scene()->addPixmap(pixmap);
}

1 个答案:

答案 0 :(得分:0)

QImage构造函数的文档说

  

警告:这将创建一个包含未初始化数据的QImage。呼叫   fill()用之前的适当像素值填充图像   用QPainter画上它。

所以我建议在对pixmap做任何事情之前添加一个image.fill(0)