全体として、これを処理する良い方法を判断するのに苦労しています。と呼ぶデータモデルがありますMyData
。データを としてモデル化したQObject
ので、信号とスロットがあります。
モデル内のデータを変更するには、そのスロットに接続するか、スロットを直接呼び出します。その変更が発生すると、モデルはそのデータが変更されたことを通知します。例えば:
class MyData : public QObject
{
...
public slots:
void AddPoint(QPointF);
signals:
void AddedPoint(QPointF);
};
void MyData::AddPoint(QPointF p)
{
//added the point
emit AddedPoint(p);
}
今、私の見解は2つの別々のものです:
- を
QGraphicsView
使用してポイントを表す がありますQGraphicsEllipseItem
- ポイントをリストするためにa
QListView
を使用する aがあります。QAbstractItemModel
シグナルとスロットを使用して、これら 2 つのグラフィカル ビューを同期します (QGraphicsItem をサブクラス化して、QObject から継承します)。
質問:テーブルが変更を行うと、 MyData
QGraphicsViewAddedPoint
に接続されていることを通知します。 ただし、MyData::AddedPoint
もテーブルに接続されているため、同期を試みると 2 つの同一のポイントが追加されます。進め方について誰かアドバイスをいただけますか?
これまでの私の考えとアイデア:
- ポイントが存在するかどうかを確認し、繰り返しを防ぐことができました。挿入には適していますが、削除や更新には適していません。
- 私が思う最善の方法は、
MyData
スロットで、sender() を 1 秒間ブロックしてから、ブロックを解除することです。
編集: MyData
実際には「コントローラー/インターフェース」クラスです。実際のモデルはOpenCVタイプを使用しているため、Qtアーキテクチャから分離したままにします。