![]() |
|
|
![]()
|
|
| yngwie19 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Всем привет подскажите как лучше создавать новые виджеты
так
или
В книгах по-разному. Влияет ли это на что-нибудь? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
Да, влияет на время жизни. В первом случае объект погибнет при выходе за границы блока. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
||||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Это Я все понимаю. Как принято в Qt - создавать объект через указатель или нет.
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 4 Всего: 121 |
Очень даже связан. Читать раздел assistant'a "Object Trees and Object Ownership" Если объект имеет parent'a то такой объект должен быть создан в куче (через указатель тобишь). За уничтожением такого объекта будет следить система Qt, при уничтожении парента все наследники так же будут уничтожены. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
"Наследник" имеет некоторое другое значение. В данном случае подходит слово "ребенок". |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 4 Всего: 121 |
mes, да child'ы в оригинальной терминологии.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
||||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
||||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Смотря какие обьекты. W4FhLF сказал какие конкретно обьекты надо создавать в куче. QString например в куче создавать не надо. Тут речь не про то, поместится или нет. Просто QT построена на принципе Parent->Child и при удалении Parent-а все его потомки удаляются автоматически. Удаляются оператором delete. Проверьте что будет если написать
думаю вопросы отпадут Это сообщение отредактировал(а) azesmcar - 6.6.2009, 11:35 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
не всегда и по большей степени не из за размера. Главное управление временем жизни. если поймете как связаны эти две нижеприведенные цитаты, поймете и в чем дело Это сообщение отредактировал(а) mes - 6.6.2009, 12:58 |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
все правельно понял: "чилда" можно удалить вручную(delete)? просто столкнулся с итуацией: есть MainWindow, упрощая задачу, раз в минуту необходимо открытвать диалоговое окно на 10 секунд и закрывать его, те оно само закрывается по своему внутреннему таймеру. так вот если приложение работает долго, а оно и должно долго работать, то видно как память "утекает". Вопрос: можно ли в диалоговом окне по закрытию делать delete this? Если нет, то как быть тогда? Заранее благодарен! Добавлено через 1 минуту и 2 секунды ЗЫ модальное диалоговое окно, те необходимо в данном случае указать парента в качестве MainWindow |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 4 Всего: 121 |
chaos, а зачем для каждого раза создавать новый виджет? Почему нельзя показывать один и тот же, но с изменениями?
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
W4FhLF, вообще можно.
больше нитересует вопрос выше. ЗЫ переделаю на создание одного виджета |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
так что на счет удаления объекта в ручную?
|
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Удалять вручную можно. Деструктор QObject вначале проверит своего парента и, если надо, отметится, что "я больше не твой чайлд". Но причём тут delete this? Это потенциально опасная конструкция и.. вообщем плохая практика. В любом случае же, я думаю, есть какая-то обёртка вызывающая диалог (передающая параметры для инициализации, возвращающая результат)? Вот в ней и удалять. Да и вообще, если диалог вызывается через exec (ну и вся обработка в рамках одной функции), зачем нужно создавать объект в куче (смотрим соседнюю тему)?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
В принципе Любитель все объяснил. Добавлю лишь кусок псевдокода показывающий поведение Окна:
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
Любитель,
mes, Спасибо! |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
chaos, для таких случаев умные тролли придумали метод deleteLater() (можно вызывать из объекта вместо delete this;)
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |