Russian Qt Forum
Февраля 15, 2025, 12:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание окон через new  (Прочитано 1792 раз)
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.049 секунд. Запросов: 23.