2015-06-12 28 views
2

有了这个简单的循环中循环使用QPainter与QImage的:不是在主线程

for(int i=0;i<levels;i++) 
{ 
    QImage stub(QSize(w,h),QImage::Format_RGB888); 

    QPainter painter(&stub); 
    painter.setFont(QFont("Monospace",8)); 
    painter.setPen(Qt::magenta); 
    painter.drawText(stub.rect(), 
        Qt::AlignVCenter|Qt::AlignCenter, 
        QString("LAYER-%1").arg(i)); 

    stub.save(QString("layer%1.jpg").arg(i),"JPG"); 
} 

我得到一个有趣的结果:

layer0 layer1 layer3

注层数印在图像上。 这看起来像一些缓冲问题。我还应该提到这个循环不在主线程中运行。 如何同步QPaitner和QImage保存?

回答

5

好吧,这个不错的错误。您正在使用未初始化的QImage

http://doc.qt.io/qt-4.8/qimage.html#QImage-2

警告:这将创建一个QImage的未初始化的数据。在 上使用QPainter调用fill()填充具有适当像素值的图像。

所以在每次迭代中同一块内存被分配给QImage,这在以前是通过以前QImage拥有。你是不幸的,在第一次迭代中,你有明确的内存,而不是一些垃圾值。

调用填充方法来解决这个问题。

+0

非常感谢! – user2449761

相关问题