繁体   English   中英

在不是主线程的循环中将QPainter与QImage一起使用

[英]Using QPainter with QImage in a loop not in a main thread

通过这个简单的循环:

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");
}

我得到一个有趣的结果:

层0layer1的三层

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

好的,这个不错的错误。

您正在使用未初始化的QImage

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

警告:这将使用未初始化的data创建一个QImage 在使用QPainter绘制图像之前,调用fill()用适当的像素值填充图像。

因此,在每次迭代中,会将相同的内存分配给QImage ,该内存先前由先前的QImage拥有。 您很不幸,在第一次迭代中,您有一块清晰的内存,而不是一些垃圾值。

调用fill方法可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM