1

在我的 GUI 中,我想从图像中加载几个缩略图。图像尺寸较大(可能为 3mb)。

我想在线程中加载的图像,以便 GUI 不会在此时冻结。为此,我测试了将图像加载为QIcona QRunnable

  ImageLoader::ImageLoader(QListWidgetItem *item, QString path)
  {
   this->path=path;
   this->item=item;
   }

  void ImageLoader::run()
  {
    QIcon icon(path);
    item->setIcon(icon);
  }

我称这个 QRunnable 为QThreadPool::globalInstance()->start(new ImageLoader(item,path));

但是有一个错误:“QPixmap:在 GUI 线程之外使用像素图是不安全的”。

我能做什么,这样gui就不会冻结?

4

1 回答 1

4

使用 QImage。它可以在非 gui 线程中使用。

加载 QImage 可以在非 gui 线程中完成,但是任何接触 GUI(在本例中是操作 QListWidgetItem)都必须在 gui 线程中完成。这没关系,因为大部分时间都是加载和图像解码。

另外,关于QThread的使用请看这篇文章:https ://www.qt.io/blog/2010/06/17/youre-doing-it-wrong 。根据您的代码片段,您似乎陷入了文档中描述的陷阱。

于 2013-10-07T20:29:48.877 回答