0

モデルを遅延ロードできるようにするために、canFetchMore、hasChildren、および fetchMore を実装しました。これは非常にシンプルで、QT に基づいています: http://doc.qt.io/archives/qt-4.7/itemviews-simpletreemodel.html

私の問題は、私のアプリケーションでは、子の取得は非常に迅速な操作ではないことです。サーバー側で、子が実際に誰であるかを判断する間、数秒の遅延が発生します。

私はそれに対処する方法がわかりません。誰かがノードを展開するたびに、数秒間アプリケーションをロックすることはできません。バックグラウンドでこれを実現する方法がわかりません。サブプロセスまたはスレッドを作成して、子を取得し、クライアント側のデータ構造を更新する作業を実際に行う場合、これが正常に完了したこと (およびノー​​ドが最終的に展開すること) をモデルに伝えるにはどうすればよいでしょうか。 .

また、ノードが現在バックグラウンドでデータをロード中であることを示す方法はありますか?

これらがばかげた質問である場合は申し訳ありません.GUIプログラミングは私にとってまだ少し謎であり、QTを使用したことはありません.

記録として、私は Python を使用していますが、答えが C++ で与えられている場合、それらを理解できます。

ありがとう

4

1 に答える 1

1

サブプロセスまたはスレッドを作成して、子を取得し、クライアント側のデータ構造を更新する作業を実際に行う場合、これが正常に完了したこと(およびノー​​ドが最終的に拡張されること)をモデルに通知するにはどうすればよいですか? 。

信号とスロットを使用できます。データを取得するスレッドでは、のようなカスタムシグナルを送信someDataAvailable(YourdataType)し、GUIでは、のようなスロットでこのシグナルを処理しますhandleDataReadySignal(YourdataType)。信号は、放出時に指定したオブジェクトを通過します。handleDataReadySignalどうやらあなたはスロットのGUIとリストを更新する必要があります。もちろんconnect、できればリストが添付されているウィンドウ/ダイアログのコンストラクターでシグナルにスロットを設定する必要があります

于 2012-07-11T22:43:48.247 に答える