2017-03-18 7 views
0

QGraphicsItemsへのポインタベクトルがあります。これらはすべてQGraphicsLinearLayoutに追加されています。Qt QGraphicsLinearLayoutに追加されたときにQGraphicsItemsに何が起こるか

私はメモリ管理が心配です。

1)追加するとどうなりますか? 自動的に親を取得するのか、明示的にitem.setParentLayoutItem(レイアウト)を呼び出す必要がありますか?

2)ペアレント化されている場合、Qtは削除を処理しますか? (親が削除されたとき)

3)ベクターとレイアウトからアイテムを削除するremoveメソッドもあります。削除する前にレイアウトからアイテムを削除するか、vector.erase(...)を呼び出すか...これは親の有無に依存しますか?

答えて

0

1)追加するとどうなりますか?彼らは自動的に親を取得するのですか? 明示的にitem.setParentLayoutItem(レイアウト)を呼び出す必要がありますか? QTドキュメントから

(QGraphicsWidgetがするような )項目がQGraphicsItemとQGraphicsLayoutItemの両方を継承する場合の項目は実際には2つの所有権 階層の一部です。このプロパティは、子要素が破棄されたときにその子要素の でレイアウトが何をすべきかを通知します。 QGraphicsWidgetの場合は、 が優先され、レイアウトが削除されたときには の子供は削除されません(グラフィックスアイテム階層の一部でもあるため)。

ownedByLayoutsetOwnedByLayout

は、理論的に彼らは、しかし、あなたは上記の二つのリンクから提供されているドキュメントを削除をパラメータ化することができます参照してください。

2)それらが親である場合、Qtは削除を処理しますか?

はい

3)また、私は私のベクトル とレイアウトから項目を削除するremoveメソッドを持っています。 を削除する前にレイアウトから項目を削除する必要がありますか?...(...)...これは私が親をしているかどうかにかかわらず に依存していますか?

あなたQGraphicsLayoutItemは(親/子関係)を所有している場合は、すべてのQGraphicsItem親が削除されると、それらはすべて削除されます。

あなたは、単一の要素を削除したい場合は、その後に簡単なコール:

theItemYouWantToDelete->deleteLater() 

で十分です。

関連する問題