我有一个来自 QRunnable 对象的派生类。它正在执行小型图像处理任务。看起来如下:
void ImageProcessor::run()
{
int bytesPerLine;
if(_format == QImage::Format_RGB32)
bytesPerLine = _width * 4;
QImage img(_buffer, _width, _height, bytesPerLine, _format);
QTransform transform;
transform.rotate(90);
QImage rotatedImage = img.transformed(transform);
_resultImage->clear();
QBuffer buffer(_resultImage);
buffer.open(QIODevice::WriteOnly);
rotatedImage.save(&buffer, "JPG", 85);
buffer.close();
}
我的问题是当我执行我的应用程序时,会显示以下错误消息,但并非总是如此。我可能会在其他时间运行它,但没有发现任何特别之处。
QObject::moveToThread: Current thread (0x2012268) is not the object's thread (0x2007dc0). Cannot move to target thread (0x21a6218)
我使用的唯一 QObject 派生类是 QBuffer,这个是在执行线程中本地创建的。我不明白为什么我会得到这个。
任何帮助,将不胜感激!
如果可以提供任何线索,我会在 Windows 7 和 MSVC2010 32 位下使用 QT 5.3 运行它。
以下链接指向重现问题的示例应用程序。ParallelImageProc.zip它包含一个屏幕截图,显示了我得到的实际结果。
谢谢!