Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在线程中加载QListWidgetItem的映像?_Qt_Qlistwidget - Fatal编程技术网

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

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() {

在我的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(新的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-还没有看到那篇文章。谢谢