1

私の GUI では、画像からいくつかのサムネイルをロードしたいと考えています。画像のサイズが大きい (おそらく 3 MB)。

今回はGUIがフリーズしないように、スレッドにロードしたい画像。このために、画像を a としてロードするようにテストしQIconました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 に答える