2013-12-08 9 views
0

Я не очень хорошо знаком с моделью памяти Qt, особенно когда дело касается обработки изображений. Я создал пустую pixmap и добавляю ее в сцену QGraphicsView. Кажется, он работает правильно, прыгая между двумя размерами, но я заметил, что получаю графические артефакты, вызывающие эту функцию, если я открою QFileDialog (before и after). Эти артефакты находятся в фактическом представлении, поскольку я могу передвигаться, и они остаются настоящими. Не похоже, где на экране появляется QFileDialog, я все еще получаю эти проблемы.QGraphicsView показывает артефакты после открытия диалогового окна файла

Есть ли что-то, что мне нужно сделать, чтобы вручную переустановить эту часть изображения или у меня, вероятно, есть более серьезные проблемы в другом месте кода?

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 конструктора говорит

Предупреждения: Это создаст QImage с неинициализированными данными. Вызовите fill(), чтобы заполнить изображение соответствующим значением пикселя до , нарисовав его с помощью QPainter.

, поэтому я предлагаю добавить image.fill(0), прежде чем что-либо делать с помощью pixmap.