Qt では、コンポジションを介して親に子ウィジェットを埋め込むことができますか、それとも で作成する必要がありnew
ますか?
class MyWindow : public QMainWindow
{
...
private:
QPushButton myButton;
}
MyWindow::MyWindow ()
: mybutton("Do Something", this)
{
...
}
QObject
ドキュメントによると、親が破棄されると、から派生したオブジェクトは自動的に破棄されます。これdelete
は、上記の例ではクラッシュする への呼び出しを意味します。
以下を使用する必要がありますか?
QPushButton* myButton;
myButton = new QPushButton("Do Something", this);
編集
答えは非常に多様で、基本的に 3 つの可能性に要約できます。
- はい、構成は問題ありません。Qt は、オブジェクトがどのように割り当てられ、ヒープに割り当てられたオブジェクトのみを把握でき
delete
ます (これはどのように機能しますか?) - はい、構成は問題ありませんが、親を指定しないでください。そうしないと、親が
delete
オブジェクトを呼び出すためです (しかし、親のないウィジェットはトップレベル ウィンドウに変わりませんか?) - いいえ、ウィジェットは常にヒープを割り当てる必要があります。
どちらが正しいですか?