Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2013, 14:35   #1
TRIZER
Студент
Пользователь
 
Аватар для TRIZER
 
Регистрация: 13.11.2009
Сообщений: 65
По умолчанию Создание экземпляра окна.

Добрый день.
Вопрос простой. Не могу найти на него ответа.
В программе есть главное окно, есть несколько дочерних окошек. Каким способом их лучше всего создавать, что бы без утечек памяти и что бы при закрытии главного окна корректно закрывались дочерние?
Пока, вижу несколько способов.

newWindow = new NewWindow;
newWindow->show();

Тут утечка памяти. Избежать этого можно, только если окно создать один раз, а потом показывать/скрывать. Но мне желательно, что бы экземпляр создавался каждый раз.

Второй вариант, если окно диалоговое, но у меня не все окна диалоговые.

NewWindow newWindow;
newWindow.exec();

Третий вариант. Нечто вроде такого.

newWindow = 0;
....
if (newWindow != 0)
delete newWindow;

Этот метод мне кажется костылем.

Еще есть вариант перехватывать событие закрытия окна, удалять его и обнулять указатель, а потом:

if (!newWindow)
newWindow = new NewWindow;

Но загромождать код обработчиками событий не хотелось бы.

Еще читал про автоматическое удаление окна при закрытии, задаваемое флагом. Но при удалении не обнуляется указатель и я не могу знать, удалилось окно, или нет.

Скорее всего придется отлавливать сигнал о закрытии окна (. Может быть есть другие предложения, уверен в Qt подумали об этом и есть какая то общепринятая форма записи открытия нового окна (окно открывается из главной менюшки)?
TRIZER вне форума Ответить с цитированием
Старый 26.08.2013, 18:05   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Когда вы создаёте диалоговое окно с помощью new, то его не нужно освобождать. Там всё продумано. Не могу найти где я об этом читал...
8Observer8 вне форума Ответить с цитированием
Старый 27.08.2013, 10:20   #3
TRIZER
Студент
Пользователь
 
Аватар для TRIZER
 
Регистрация: 13.11.2009
Сообщений: 65
По умолчанию

Да. Есть такая штука. Типа:
Код:
    settingsWindow = new SettingsWindow(*settings,this);
    settingsWindow->setAttribute(Qt::WA_DeleteOnClose);
Я собственно сделал так:
Создаю при помощи new. И указываю окошку, что оно модальное.

Другое окно должно создаваться только один раз. Я его создаю в конструкторе главного окна. А потом только делаю
Код:
window->show()
Я понял, что универсального способа нет и , наверное, быть не может. Если нужно, что бы новое окно открывалось только один раз и при этом не было модальным, решаю эту проблему флагами. Кроме того, у всех QObject есть сигнал destroyed(QObject*), который тоже может помочь в этом случае.

Проблема решена.
TRIZER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание экземпляра класса по имени Lasor Общие вопросы C/C++ 24 17.12.2012 22:28
Создание экземпляра класса biohazard120 Общие вопросы Delphi 11 15.09.2012 13:23
Создание окна Stas96 Win Api 1 29.10.2010 21:58
Создание экземпляра компонента mar4elo Общие вопросы C/C++ 2 14.05.2010 05:40
про классы окон, и дополнительное место для экземпляра окна Пепел Феникса Win Api 2 22.04.2010 15:48