Qt: Могут ли дочерние объекты быть скомпонованы в их родительский объект?

Могу ли я в Qt встраивать дочерние виджеты в их родительские виджеты через композицию, или мне нужно создавать их с помощью new ?

class MyWindow : public QMainWindow
{
    ...
private:
    QPushButton myButton;
}

MyWindow::MyWindow ()
 : mybutton("Do Something", this)
{
   ...
}

В документации говорится, что любой объект является производным from QObject будет автоматически уничтожен при уничтожении его родителя; это подразумевает вызов delete , что в приведенном выше примере приведет к сбою.

Должен ли я использовать следующее?

QPushButton* myButton;

myButton = new QPushButton("Do Something", this);

РЕДАКТИРОВАТЬ

Ответы весьма разнообразны и в основном сводятся к три возможности:

  • Да , композиция в порядке. Qt может выяснить, как был выделен объект, и только удаляет объекты, выделенные в куче (как это работает?)
  • Да , композиция в порядке,но не указывайте родителя, поскольку в противном случае родительский элемент вызвал бы delete для объекта (но разве виджет без родительского элемента не превратится в окно верхнего уровня?)
  • Нет , виджеты всегда должны выделяться в куче.

Какой из них правильный?

14
задан Tony the Pony 3 June 2011 в 09:57
поделиться