12

私のプロジェクトではQGraphicsScene、コード全体で a を使用し、アイテムを追加/削除しています。

QGraphicsItemが追加または削除されるたびに通知を受け取りたいと思います。多くの Qt クラスには、そのような変更で呼び出される通知シグナルまたは少なくとも仮想関数があります。多くの場所に多くのコード行を追加することを避けようとしていますが、これは面倒であるだけでなく安全でもありません (現在または将来の挿入/削除を忘れる)。

任意の で動作するソリューションが必要QGraphicsItemです。

これは機能しないもののリストです。

  • QGraphicsScene (のようにQAbstractItemModel::rowsInserted()の信号に接続します->何もありません。
  • QGraphicsScene仮想通知関数を継承してオーバーロードする(のようにQTabWidget::tabInserted()) -> 何もありません。
  • inherit と overload addItem()、自分自身に通知を送信する( のようにQMdiArea::addSubWindow()) ->addItem仮想ではなく、 のコンストラクタから呼び出されQGraphicsItemsます。
  • 新しく追加されたイベントフィルターをインストールしますQGraphicsItems->新しく追加されたアイテムを取得する方法がわかりません。また、sceneEventFilterそれは other にのみインストールできるものになりますQGraphicsItems
  • connect to itemChange()of QGraphicsItem->itemChangeはシグナルでQGraphicsItemはなく、オーバーロードはオプションではありません。
  • ラップQGraphicsScene(シーンをプライベート メンバーとして持つ) を行い、関数addItemremoveItem->のみを公開しますがQGraphicsItems、そのシーンではまだ関数を介してアクセスできるscene()ため、このソリューションは十分に安全ではありません。

アイテムの変更に関する通知を受け取るにはどうすればよいですか?

私が見逃した簡単な方法があれば、それを教えてください。それ以外の場合は、これに関するアイデアをいただければ幸いです。

4

2 に答える 2

1

あなたができる最善のことは、QGraphicsScene::changed()信号に接続することだと思います。

QGraphicsView表示を更新することを目的としているため、どの項目が変更/追加/削除されたかはわかりません。ただし、提供されているリージョンを使用して見つけることができるはずです。

于 2012-10-22T13:49:25.757 に答える