В 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);
ИЗМЕНИТЬ
Ответы весьма разнообразны и в основном сводятся к трем возможностям:
- Да, композиция в порядке. Qt может определить, как был выделен объект, и только
delete
объекты, выделенные кучей (как это работает?) - Да, композиция в порядке, но не указывать родителя, поскольку родитель в противном случае вызывал бы
delete
на объект (но не будет виджет без родителя превратиться в верхнюю -level window?) - Нет, виджеты всегда должны быть выделены в виде кучи.
Какой из них правильный?