Russian Qt Forum
Ноябрь 22, 2024, 09:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание окон через new  (Прочитано 1722 раз)
Vadim7423
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« : Ноябрь 21, 2022, 06:53 »

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

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #1 : Ноябрь 21, 2022, 11:26 »

В общем сделал так:
Код:
MainWindow::~MainWindow()
{
    for(QMdiSubWindow* item : mdiArea->subWindowList()) {
        if(item != nullptr) {
            delete item;
        }
    }
}
Не знаю на сколько это правильно в рамках Qt
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #2 : Ноябрь 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.
« Последнее редактирование: Ноябрь 21, 2022, 12:03 от PimenS » Записан
Vadim7423
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #3 : Ноябрь 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 и там храню указатели на подокна (соответственно у меня не может создаться два одинаковых окна, оно и не нужно для меня) и в деструкторе прохожу по этому словарю. Чтобы наверняка, пока не разберусь с этим более детально.
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #4 : Ноябрь 21, 2022, 14:54 »

Читал, но так и не понял, освобождается ли память при этом.

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

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #5 : Ноябрь 22, 2022, 08:52 »

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


Страница сгенерирована за 0.071 секунд. Запросов: 23.