0

我正在尝试实现自定义文件资源管理器,它获取特定(内部文件系统)文件的元数据并显示所有这些数据以及文件。对于这个任务,我已经实现了自定义 QFileSystemModel 来处理这个问题。

现在,我知道 QFileSystemModel 中文件的加载是异步的,但显示不是。Qt 保持显示作业,直到所有文件都加载完毕。由于我在每个显示调用中都包含了元数据提取逻辑,因此它使包含超过 100 个文件的文件夹的显示速度非常慢(即使在缓存之后)。在整个这段时间内,显示被完全屏蔽。如何异步显示结果。准确地说是部分显示列表,然后在更新可用时刷新它。

文件通过 QTableView UI 小部件显示。

4

1 回答 1

0

1.您可以将提取逻辑放在不同的线程中。看看这里如何做到这一点:http: //mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/
如果你使用共享数据不要忘记使用互斥锁。您还可以通过带有包含元信息的参数的信号将新线程中的新元发送到 GUI。通过这种方式,您需要注册一个新类qRegisterMetaTypeQ_DECLARE_METATYPE使其可以将其转换为 QVariant 并返回:http:
//qt-project.org/doc/qt-4.8/qmetatype.html

2.如果您禁用图标加载,您也可以使文件加载更快。例如,如果您只有一种类型的文件,您可以提供从资源中预加载的图标。
这是禁用图标加载的方法:

a) 创建一个假图标提供者:

class FakeIconProvider : public QFileIconProvider
{
public:
  FakeIconProvider();
  virtual QIcon icon(IconType) const override
  {
     return QIcon();
  }
  virtual QIcon icon(const QFileInfo&) const override
  {
     return QIcon();
  }
};

b) 创建假图标提供程序的实例并将其安装到模型中:

 model->setIconProvider(m_fakeIconProvider);
于 2014-08-15T05:50:51.990 回答