2012-01-05 17 views
5

QAction *オブジェクトの削除を担当するQMenuにQAction *を追加する場合は、私はそれがQMenuまたはQActionのドキュメントに記載されているのを見つけることができませんでした。QActionの所有者

void MyClass::contextMenuEvent(QContextMenuEvent *evt) 
{ 
    QMenu menu(this); 
    QAction *a = new QAction(tr("Some action"), this); 
    menu.addAction(a); // who owns a? 
    menu.exec(evt->globalPos()); 
} 

Qt Menus exampleので、私はQMenuはQActionの所有権を取得することを前提とし、それが作成するアクションのいずれかを削除しません。あれは正しいですか?

答えて

5

あなたがして(QMenuがある)QWidgetに既存のアクションを追加する場合:

をアクションの所有権が、このQWidgetのに転送されません。あなたの例では、aの削除は、あなたが親QObjectとしてそれを使用しているので、MyClassによって処理されますので、aQObjectのデストラクタで削除されていることを

注意。

+0

ありがとうございました。あなたの答えは "a"の破壊に関してあいまいです。 QObjectは私のためにやってくれますか、MyClassのどこかで明示的にそれをしなければなりませんか? – glennr

+0

各QObjectは、それが「親」であるQObjectのリストを維持します.QObjectが破棄されると、「子」も削除されます。ですから、あなたのQObjectをQObjectから派生したオブジェクトの親argに渡す以外は何もする必要はありません。 QObjectのドキュメントを読むと、それはその努力よりはるかに優れています... – cmannett85