2012-03-20 8 views
2

以前はモデルとビューを別のスレッドで実行していましたが、どのように問題になるか理解しています。この問題を回避するために、私はデータの重複を考えていました。ワーカースレッドによってデータが変更されると同時に、GUI /モデルスレッドへの更新を送信して、同じデータでモデルを更新します(したがって、GUI /モデルではデータの正確なコピーが存在します)。Qtモデル - 別のスレッドでデータとモデルを表示

これは考えられるアプローチのようですか?他の方法は、QTableWidgetなどのデフォルトモデルで直接ウィジェットを使用することですが、デフォルトではQTableViewによって強化された多くのことを行う必要があります。

お勧めします!他の質問へ

リンク:Design Pattern, Qt Model/View and multiple threads

+0

いいですね。キューに登録された信号/スロット接続を使用して更新を行うことができます。膨大な量の更新がないか、データのコピーに非常にコストがかかる場合を除き、問題は発生しません。作業者が既存のデータを保持する必要がない場合は、重複したRAMの使用を避けるために、更新を送信して忘れてしまいます。 –

答えて

0

可能であるが、以下のようにいずれかの場合には、あなたが、少なくとも2つのオブジェクトが必要になります2つのシナリオがあります。

データオブジェクト

が含まれていが、データの保守と操作に必要なすべての機能。データは、データを記述するオブジェクトへのポインタに格納されます。このためのデータ構造私はあなたに任せます。

モデル

現在QTableView

シナリオ1

データ表示のみであると表示されているデータへのポインタのベクトルを含みQTimer信号又は上のどのケース別の信号は、データストレージがロックされており、ディスプレイモデルのベクトルをカットして新しいデータでQTableViewが再描画されるように3210が呼び出されます。

シナリオ2

あなたはQTableViewでカスタムItemEditorを経由してデータを操作することができます。この場合、QTableViewのトップウィジェットは、データオブジェクトQTableViewへの参照と、編集が完了したときにItemEditorによって放出されたシグナルのシグナルハンドラを持つ必要があります。このシグナルハンドラは、データオブジェクトの内部のデータ構造をロックし、更新すると、新しいベクトルを表示するようにカットすることがありますが、それほど頻繁ではない場合もあります。

どのようにロックや検索などを設定するかは、あなた次第です。