Qt 如何在线程中加载QListWidgetItem的映像?
在我的GUI中,我想从图像中加载几个缩略图。图像大小较大(可能为3mb) 我希望加载到线程中的图像,这样GUI就不会在此时冻结。 为此,我测试了将图像作为Qt 如何在线程中加载QListWidgetItem的映像?,qt,qlistwidget,Qt,Qlistwidget,在我的GUI中,我想从图像中加载几个缩略图。图像大小较大(可能为3mb) 我希望加载到线程中的图像,这样GUI就不会在此时冻结。 为此,我测试了将图像作为QIcon加载到QRunnable: ImageLoader::ImageLoader(QListWidgetItem *item, QString path) { this->path=path; this->item=item; } void ImageLoader::run() {
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(新的ImageLoader(项,路径))调用了这个QRunnable代码>
但是有一个错误:“QPixmap:在GUI线程之外使用pixmap是不安全的”
我能做些什么,这样gui就不会冻结?使用QImage。它可以从非gui线程使用
加载QImage可以在非gui线程中完成,但是任何涉及gui的操作(在本例中是操作QListWidgetItem)都必须在gui线程上完成。这没关系,因为加载和图像解码占用了大部分时间
另外,请参阅这篇关于QThread使用的文章:。根据您的代码片段,您可能正落入文档中描述的陷阱。使用QImage。它可以从非gui线程使用
加载QImage可以在非gui线程中完成,但是任何涉及gui的操作(在本例中是操作QListWidgetItem)都必须在gui线程上完成。这没关系,因为加载和图像解码占用了大部分时间
另外,请参阅这篇关于QThread使用的文章:。根据您的代码片段,看起来您可能掉进了文档中描述的陷阱。@ksimons,虽然我同意最好不要将QThread子类化,但现在有一篇文章的后续文章:@Merlin069-还没有看到那个。谢谢@ksimons,虽然我同意最好不要将QThread子类化,但现在有了那篇文章的后续内容:@Merlin069-还没有看到那篇文章。谢谢