0

Qtを使用してWindows用の検索ユーティリティを作成したいと思います。C#と.NETで同じアプリケーションを作成しましたが、比較したいと思います。私のアプリケーションはQDir::entryList、指定されたパスの内容を再帰的に使用して検索し、それらをに追加する必要がありQListWidgetます。entryListは遅い可能性があるため、で実行する必要がありQThreadます。さらに、ユーザーはいくつかの結果を見るのに長い間待つべきではありませんQListWidgetが、いくつかの結果を入力する必要があります。

私は次のことをしました:

  1. 検索を行うクラスを作成しました。このクラスはsendItem(QString)、ファイルが見つかるとメッセージを出力します。
  2. このクラスは、findクラスのオブジェクトであるf.moveThread(&thread)whereを使用して別のスレッドで実行され ます。f
  3. QListWidgetにはスロットがないため、スロットを持つ別のクラスwrapperを作成しましaddItem(QString)た。このクラスのオブジェクトはGUIスレッドで実行されるため、メッセージを受信するとsendItem、スロットaddItemは次のようになりますl.addItem(s)。ここで、はシグナルsで送信されるデータです。sendItem

これは、別のスレッドからQListWidgetを更新するための最適な方法ですか?それは非常に複雑なので(そしてそれは機能しません)、しかし私はより良いものを知りません。C#delegate FillListでは、デリゲートオブジェクトにメソッドを入れて作成しましたfillList。引数としてwpfリストボックスのメソッドを使用して呼び出しBeginInvokeたメソッド内からとを指定しました。あなたはsourceforge.netでC#アプリケーションを見ることができますfillListthis.Dispatcher.invokeaddItem

そして他の質問:QListViewこの種のアプリケーションにを使用することが望ましいですか?答えてくれてありがとう。

4

1 に答える 1

2
  1. これは、別のスレッドからGUIを更新するQtの方法です。うまくいかないので、コードを貼り付けて分析します。

  2. リストが大きすぎない場合はQListWidgetで問題ありませんが、リストが非常に大きい場合は、QListViewを使用することをお勧めします。これは、QListWidgetの場合、リストにレンダリングされる各アイテム自体がウィジェットであり、多くのメモリを消費するためです。ただし、QListViewでは、すべてのアイテムの描画を担当するのはビューの代理人です。

于 2012-12-13T13:33:58.470 に答える