2

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

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

提案してください!

他の質問へのリンク: デザイン パターン、Q​​t モデル/ビュー、および複数のスレッド

4

1 に答える 1

0

考えられるシナリオは 2 つありますが、いずれの場合も、次のように少なくとも 2 つのオブジェクトが必要です。

データ オブジェクト

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

モデル

現在表示されているデータへのポインタのベクトルが含まれています

シナリオ 1

入力データQTableViewは表示専用です。この場合、QTimer信号または別の信号でデータ ストレージがロックされ、表示モデルのベクトルが切り取られてモデルに挿入され、新しいデータで再描画さreset()れるように呼び出されます。QTableView

シナリオ 2

でカスタムItemEditorを介してデータを操作できますQTableView。この場合、最上位のウィジェットには、データ オブジェクトQTableViewの参照と、編集が完了したときに によって発行されるシグナルのシグナル ハンドラが必要です。このシグナル ハンドラーは、データ オブジェクト内のデータ構造をロックして更新します。一度完了すると、新しいベクターを切り取って表示する場合がありますが、多くの場合、そうする必要はありません。QTableViewItemEditor

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

于 2012-03-20T19:46:37.487 に答える