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 に新しいメタを送信することもできます。このようにして、新しいクラスを登録し、それを QVariant に変換して戻すことができるようにする必要がqRegisterMetaTypeありQ_DECLARE_METATYPEます:
http://qt-project.org/doc/qt-4.8/qmetatype.html

2.また、アイコンの読み込みを無効にすると、ファイルの読み込みを大幅に高速化できます。たとえば、ファイルの種類が 1 つしかない場合は、リソースからプリロードされたアイコンを提供できます。
アイコンの読み込みを無効にする方法は次のとおりです。

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 に答える