В следующем примере класса Qt в конструкторе и в функциях, вызываемых конструктором, создается много объектов, но они не указываются указателями атрибутов и, как я понял, не могут быть удалены в деструкторе (нет в укажите в любом из файлов ключевое слово delete).
http://qt-project.org/doc/qt-4.8/widgets-groupbox.html
в window.h
class Window : public QWidget
{
Q_OBJECT
public:
Window(QWidget *parent = 0);
private:
QGroupBox *createFirstExclusiveGroup();
QGroupBox *createSecondExclusiveGroup();
QGroupBox *createNonExclusiveGroup();
QGroupBox *createPushButtonGroup();
};
в window.cpp
Window::Window(QWidget *parent)
: QWidget(parent)
{
QGridLayout *grid = new QGridLayout;
grid->addWidget(createFirstExclusiveGroup(), 0, 0);
grid->addWidget(createSecondExclusiveGroup(), 1, 0);
grid->addWidget(createNonExclusiveGroup(), 0, 1);
grid->addWidget(createPushButtonGroup(), 1, 1);
setLayout(grid);
setWindowTitle(tr("Group Boxes"));
resize(480, 320);
}
QGroupBox *Window::createFirstExclusiveGroup()
{
QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons"));
QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2"));
QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3"));
radio1->setChecked(true);
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(radio1);
vbox->addWidget(radio2);
vbox->addWidget(radio3);
vbox->addStretch(1);
groupBox->setLayout(vbox);
return groupBox;
}
Я что-то пропустил или это "плохой" пример реализации? Будет ли правильная реализация ставить указатели как атрибут класса Window и уничтожать то, что они указывают в ~ Window()? Спасибо.
Поскольку все объекты добавляются в дерево объектов, они автоматически удаляются.
Например, все виджеты добавляются в макет, а сам макет устанавливается в окне. Это создает дерево объектов.
Вы можете использовать метод QObject::dumpObjectTree()
чтобы получить визуальное представление текущего дерева объектов.
См. Также " Деревья объектов" и "Собственность" в документации Qt.
~QWidget()
уничтожит их в конце. : D