2012-01-05 16 views
5

QAction * nesnesini silmek için QMenu'ya QAction * eklerken? QMenu ya da QAction için belgelerinde bulamadım.QAction mülkiyeti

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 yüzden QMenu QAction sahipliğini aldığını varsayalım oluşturduğu işlemlerden herhangi birini silmez. Bu doğru mu?

cevap

5

sonra bir QWidget için önceden varolan bir eylem (QMenu olan) eklerseniz: eylemin sahipliği bu QWidget aktarılmaz

. böylece aQObject 'ın yıkıcı silinir Eğer bir ebeveyn QObject olarak kullanmış çünkü örnekte, a silinmesi MyClass tarafından ele olduğunu

Not.

+0

Teşekkürler. Cevabınız "a" nın yok edilmesiyle ilgili belirsizdir. QObject bunu benim için yapar mı yoksa MyClass'da açıkça bir yere yapmalı mıyım? – glennr

+0

Her bir QObject, QObject'in yok edildiğinde 'çocuklar' silindiğinde 'ebeveyn' olduğu bir QObjects listesi sağlar. Yani hayır, QObject öğenizin QObject türetilmiş nesnelerini üst argümanına geçirmeniz dışında bir şeye ihtiyacınız yoktur. QObject'teki dokümanları oku, bunu bu çabadan çok daha iyi açıklayacak ... – cmannett85