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. オブジェクトは自分自身を破壊することができますか? (Java)
- 3. 角2:DOMから自分自身を削除するコンポーネント
- 4. 24時間後に自分自身を削除する一時的なレコードを作成しますか?
- 5. 完了後に自分自身を削除するPHPスクリプト
- 6. 実行終了後、スレッドはメモリから自分自身を削除しますか?
- 7. オブジェクトを自分自身で削除するのはいつですか?
- 8. UserControlを自分自身(WPF)を削除させる
- 9. 自分自身をイベントハンドラから削除するにはどうすればいいですか?
- 10. ボタンは自分自身のサイズを変更しますか?
- 11. List <CustomObject>:カスタムオブジェクトがリストから自分自身を削除する方法は?
- 12. クラスの外部から自分自身にアクセスする
- 13. クライアントのFacebookアプリを作成して自分自身を削除できますか?
- 14. 自分自身でFacebookの写真からタグを取り除くグラフApi
- 15. 自分自身から関数を呼び出すJavascriptオブジェクト
- 16. C#windowsアプリケーションを自分自身からアンインストールする
- 17. 自分自身にdata.frameを追加できますか?
- 18. リロード時にJSONインデックスが0から始まるのではなく、自分自身に追加されます
- 19. レールアプリケーションにはどこに自分自身の「モジュール」を配置しますか?
- 20. 自分自身からpythonスクリプトを再起動
- 21. M2Eは自分のソースディレクトリを削除しますか?
- 22. ユーザーが自分のページから自分のアプリケーションをすぐに削除したことを知るには?
- 23. Java - 自分自身を閉じて自分のソフトウェアカーネルパニックなどの自分自身を再起動するにはどうすればいいですか?
- 24. 自分自身でJavaをコンパイルできますか?
- 25. イベントは自分自身を発射すべきですか?
- 26. 私は自分自身のリストビューを提示します。
- 27. ファイルはJavaで自分自身をコピーします
- 28. セッションはopeninviterで自分自身のログインを維持します
- 29. TFSから自分のローカルワークスペースにないファイルを削除する
- 30. 自分自身を返すRubyメソッド
「登録解除」とはどういう意味ですか? – Troubadour
ウィンドウにウィジェットを追加するには、私は 'addWidget'呼び出しを行う必要があります。同様に、ウィジェットをウィンドウから削除するには 'removeWidget'を実行できます。私はウィジェットが 'delete''dされているときにウィジェットが登録されていれば、これを自動的に行うかどうか知りたいです。 – Pieter
Qtはオーナーシップシステムを使用していますので、他の人が所有しているウィジェットを手動で削除しないでください(親はそれらを削除します)。 –