我对Qt的内存模型并不十分熟悉,特别是在图像处理方面。我创建了一个空白像素图并将其添加到QGraphicsView的场景中。这似乎可以在两种尺寸之间正确跳转,但我注意到如果我打开QFileDialog(before和after),我会得到调用此函数的图形工件。这些工件在实际视图中,因为我可以平移并且它们保持存在。 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);
}
答案 0 :(得分:0)
该QImage
构造函数的文档说
警告:这将创建一个包含未初始化数据的QImage。呼叫 fill()用之前的适当像素值填充图像 用QPainter画上它。
所以我建议在对pixmap做任何事情之前添加一个image.fill(0)
。