Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Vadim7423 от Ноябрь 21, 2022, 06:53



Название: Создание окон через new
Отправлено: Vadim7423 от Ноябрь 21, 2022, 06:53
Всем привет. Подскажите если создать окно таким образом:
Код:
ProfileView* view = new ProfileView();
    view->setWindowIcon(QIcon(":/images/icon.png"));
    mdiArea->addSubWindow(view);
    view->show();
Нужно ли потом удалять объект через delete? Просто в примерах авторы особо этим не заморачиваются.
Или mdiArea после уничтожения сам удалит все объекты, указатели на которые у него зарегистрированы?


Название: Re: Создание окон через new
Отправлено: Vadim7423 от Ноябрь 21, 2022, 11:26
В общем сделал так:
Код:
MainWindow::~MainWindow()
{
    for(QMdiSubWindow* item : mdiArea->subWindowList()) {
        if(item != nullptr) {
            delete item;
        }
    }
}
Не знаю на сколько это правильно в рамках Qt


Название: Re: Создание окон через new
Отправлено: PimenS от Ноябрь 21, 2022, 12:01
Судя по мануалу оно должно удалиться.

Цитировать
Note: Once the subwindow has been added, its parent will be the viewport widget of the QMdiArea.

ЗЫ. А вообще:

Цитировать
When you create your own subwindow, you must set the Qt::WA_DeleteOnClose widget attribute if you want the window to be deleted when closed in the MDI area. If not, the window will be hidden and the MDI area will not activate the next subwindow.


Название: Re: Создание окон через new
Отправлено: Vadim7423 от Ноябрь 21, 2022, 12:52

ЗЫ. А вообще:

Цитировать
When you create your own subwindow, you must set the Qt::WA_DeleteOnClose widget attribute if you want the window to be deleted when closed in the MDI area. If not, the window will be hidden and the MDI area will not activate the next subwindow.
Читал, но так и не понял, освобождается ли память при этом. В общем я сделал словарь с указателями как поле MainWindow и там храню указатели на подокна (соответственно у меня не может создаться два одинаковых окна, оно и не нужно для меня) и в деструкторе прохожу по этому словарю. Чтобы наверняка, пока не разберусь с этим более детально.


Название: Re: Создание окон через new
Отправлено: PimenS от Ноябрь 21, 2022, 14:54
Читал, но так и не понял, освобождается ли память при этом.

Проверить не сложно. Судя по коду "ProfileView" это у вас свой класс. В его деструкторе сделайте вывод, ну хотя бы qDebug(), и увидите разрушается у вас класс или нет в нужный момент.


Название: Re: Создание окон через new
Отправлено: Vadim7423 от Ноябрь 22, 2022, 08:52
Проверить не сложно. Судя по коду "ProfileView" это у вас свой класс. В его деструкторе сделайте вывод, ну хотя бы qDebug(), и увидите разрушается у вас класс или нет в нужный момент.
Спасибо разобрался.