【问题标题】:How to load Image for QListWidgetItem in a thread?如何在线程中为 QListWidgetItem 加载图像?
【发布时间】:2013-10-07 20:23:36
【问题描述】:

在我的 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(new ImageLoader(item,path)); 调用这个 QRunnable

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

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

【问题讨论】:

    标签: qt qlistwidget


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2016-01-18
    • 2021-03-18
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多