在我的GUI中,我想从图像中加载几个缩略图。图像尺寸很大(可能是3mb)。
我想在线程中加载的图像,以便GUI不会在此时冻结。
为此,我测试了将图片加载为QIcon
中的QRunnable
:
ImageLoader::ImageLoader(QListWidgetItem *item, QString path)
{
this->path=path;
this->item=item;
}
void ImageLoader::run()
{
QIcon icon(path);
item->setIcon(icon);
}
我用QThreadPool::globalInstance()->start(new ImageLoader(item,path));
但是有一个错误:“QPixmap:在GUI线程之外使用pixmaps是不安全的。”
我能做什么,以便gui不冻结?
答案 0 :(得分:3)
使用QImage。它可以在非gui线程中使用。
加载QImage可以在非gui线程中完成,但是接触GUI的任何东西(在这种情况下操作QListWidgetItem)都必须在gui线程上完成。这没关系,因为大部分时间都是加载和图像解码。
另外,请参阅此文章关于QThread的使用:http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/。根据您的代码段,您可能会陷入文档中描述的陷阱。