2013-12-08 4 views
0

특히 이미지 처리와 관련하여 Qt의 메모리 모델에 익숙하지 않습니다. 빈 픽스맵을 만들어 QGraphicsView의 장면에 추가했습니다. 이것은 올바르게 두 크기 사이에서 점프하는 것처럼 보이지만 QFileDialog (beforeafter)를 열면이 함수를 호출하는 그래픽 아티팩트를 얻게됩니다. 이 유물들은 내 주변을 돌아 다니며 볼 수 있기 때문에 실제로 볼 수 있습니다. 화면에서 QFileDialog가 팝업되는 부분은 문제가되지 않지만 여전히 이러한 문제가 발생합니다.QGraphicsView는 파일 대화 상자를 연 후 아티팩트를 표시합니다.

이미지의 해당 부분을 수동으로 다시 렌더링하려면해야 할 일이 있습니까? 아니면 코드의 다른 부분에서 더 심각한 문제가있을 수 있습니까? 그 QImage 생성자

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

문서는

경고 말한다 :이 초기화되지 않은 데이터로 QImage를 생성합니다. fill()을 호출하여 이미지를 적절한 픽셀 값으로 채우기 전에 을 QPainter로 그릴 수 있습니다.

그래서 pixmap을 사용하기 전에 image.fill(0)을 추가하는 것이 좋습니다.