首页 文章

如何在线程中加载QListWidgetItem的图像?

提问于
浏览
0

在我的GUI中,我想从图像中加载几个缩略图 . 图像大小(可能是3mb) .

我想在一个线程中加载的图像,这样GUI就不会在这段时间内冻结 . 为此,我测试了将图像加载为 QRunnable 中的 QIcon

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)); 称这个QRunnable

但是有一个错误:“QPixmap:在GUI线程之外使用pixmaps是不安全的” .

我该怎么做才能让gui不冻结?

1 回答

  • 3

    使用QImage . 它可以从非gui线程使用 .

    加载QImage可以在非gui线程中完成,但是接触GUI的任何东西(在这种情况下操作QListWidgetItem)都必须在gui线程上完成 . 这没关系,因为它是大部分时间的加载和图像解码 .

    另外,请参阅此文章关于QThread的使用:http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/ . 根据您的代码段,您可能会陷入文档中描述的陷阱 .

相关问题