delete
を使用してQWidget
を削除した場合、GUIから登録解除されるのですか、手動で行う必要がありますか?この動作の論理的な理由はありますか?QWidgetは破壊時にGUIから自分自身を削除しますか?
答えて
レイアウトまたはスタックウィジェットでaddWidget
を呼び出すと、ウィジェットの所有権がレイアウト/スタックウィジェットに転送されます。つまり、レイアウト/スタックされたウィジェットが削除されると、追加されたすべてのウィジェットも削除されます。
の所有者に関係なく、ウィジェットを削除しても問題ありません。。所有権は、単にオブジェクトの階層のメモリをクリアする便利な方法です。それを所有するオブジェクトが削除しなければならないとは決して言いません。それが事実ならば、いったんすべてのウィジェットを追加すれば、それらをすべて削除することも、まったく削除することもできなくなります!
レイアウト/スタックウィジェットが削除されたときにウィジェットを削除したくない場合は、removeWidget
を呼び出します。ウィジェットの所有権がどこに行くのかははっきりしないことに注意してください。簡単なテストアプリ。私はちょうどが所有権をQStackedWidget
から全く移さなかったことを示唆しました!
あなたの質問に答えるために、Qtは削除したレイアウト/積み重なったウィジェットからウィジェットを正しく削除します。さらに、これは正しいウィジェットがレイアウト/スタックウィジェットに属していない場合にウィジェットを削除する方法です。
すでに@CatPlusPlusによって指摘されているように、Qtは所有権システムを使用しています。ウィジェットをウィジェットなどのレイアウトやレイアウトに追加すると、そのアドオンの所有権が加算器/親に与えられます。これは、通常、メソッドのドキュメントに記載されています。たとえば、QWidget :: addLayout(QLayout *)のドキュメントを見ると、QwidgetはQLayoutの所有権を取得すると言います。親を削除すると、その子もすべて削除されます。 詳細については、この記事をお読みください。
Object Trees and Ownership in Qt
伝統的なC++で開発者がヒープに割り当てられたメモリのすべてのビットを追跡する必要があるため、この方法では、非常に便利です。しかし、この所有システムでは、開発者が両親を追跡する必要があります。
+1これは質問に直接答えるものではありませんが(質問ははい/いいえの質問としましたが、この答えのリンクには、「ツリー内のQObjectが削除されたとき、オブジェクトに親がある場合、デストラクタはそのオブジェクトをその親から自動的に削除します」という回答が含まれています。だから+1。 – blwy10
- 1. オブジェクトは自分自身を破壊できますか?
- 2. 自分自身をDSXプロジェクトから削除するには?
- 3. オブジェクトは自分自身を破壊することができますか? (Java)
- 4. 自分自身からフラグメントを削除する方法
- 5. 角2:DOMから自分自身を削除するコンポーネント
- 6. Visual Studio Team Servicesアカウントから自分自身を削除する
- 7. 自分自身を削除するスクリプト
- 8. 自分自身を削除するチェックボックスを取得します
- 9. 24時間後に自分自身を削除する一時的なレコードを作成しますか?
- 10. 自分自身を削除するJavaプログラム - 動作しない
- 11. 完了後に自分自身を削除するPHPスクリプト
- 12. 私は自分のアクセスデータベースから自分自身をロックしました
- 13. UIViewを別のビューにドラッグアンドドロップして自分自身を削除します
- 14. 実行終了後、スレッドはメモリから自分自身を削除しますか?
- 15. オブジェクトを自分自身で削除するのはいつですか?
- 16. C++スレッドが末尾で自分自身を削除する
- 17. Android Lifecycleからオブザーバーとして自分自身を削除することは必須ですか?
- 18. 自分自身をイベントハンドラから削除するにはどうすればいいですか?
- 19. 削除するボタンは、対象となる要素の代わりに自分自身を削除します
- 20. コードから自分自身にGETを送信するには?
- 21. UserControlを自分自身(WPF)を削除させる
- 22. 自分自身
- 23. ボタンは自分自身のサイズを変更しますか?
- 24. クラスは自動的に自分自身の友人ですか?
- 25. ボタンは機能を介して自分自身を削除できますか? Javascript
- 26. 自己増分アレイ破壊? Node.jsの
- 27. List <CustomObject>:カスタムオブジェクトがリストから自分自身を削除する方法は?
- 28. 自分自身からUbuntu VMの割り当てを解除する
- 29. Cスタイルのポインタから自分自身にアクセスする
- 30. クラスの外部から自分自身にアクセスする
「登録解除」とはどういう意味ですか? – Troubadour
ウィンドウにウィジェットを追加するには、私は 'addWidget'呼び出しを行う必要があります。同様に、ウィジェットをウィンドウから削除するには 'removeWidget'を実行できます。私はウィジェットが 'delete''dされているときにウィジェットが登録されていれば、これを自動的に行うかどうか知りたいです。 – Pieter
Qtはオーナーシップシステムを使用していますので、他の人が所有しているウィジェットを手動で削除しないでください(親はそれらを削除します)。 –