2012-01-05 54 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

如果添加預先存在的行動,一個QWidget(這QMenu是),則:

行動的所有權不轉移到這個QWidget的。

注意,在你的例子中,a刪除由MyClass處理,因爲你已經把它作爲一個父QObject,所以aQObject的析構函數刪除。

+0

謝謝。你的回答在「a」的銷燬方面含糊不清。 QObject會爲我做,還是必須在MyClass的某個地方顯式執行? – glennr 2012-01-06 00:22:00

+0

每個QObject都維護一個QObject對象的列表,當QObject被銷燬時,'children'也被刪除。所以不,除了將你的QObject傳遞給QObject派生對象的父arg外,你不需要任何東西。閱讀關於QObject的文檔,它會比那個努力更好地解釋它... – cmannett85 2012-01-06 00:27:02