![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Strikevld |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 53 Регистрация: 6.9.2011 Пользователь №: 2849 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Хоть убей не гугл не документация не в помощь!
Идея такая: есть сцена. есть собственный виджет построенный в дизайнере. экземпляры этого виджета должны динамически создаваться(также добавляясь на сцену) и удаляться. всё это по требаванию пользователя! Но вот такая штука они создаются,,, и показываются,,, ии удаляются если не в сцене! стоит только добавить виджет в сцену и всё его хрен удалишь! Причем хоть как хоть как: ни тебе удаляя со сцены, и даже удаляя саму сцену, ни delete wgt, ни wgt.deleteLater() отладчик не помогает вот код:
на delete и возникает неуловимое исключение, только если эти виджеты в сцене, причём пока я их не пытаюсь удалить всё нормально. (я уже подумываю так и осталять их в памяти ![]() ![]() Что не так то??? Помогите. Сообщение отредактировал Strikevld - 2.1.2013, 0:50 |
|
|
Авварон |
![]()
Сообщение
#2
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Хоть убей не гугл не документация не в помощь! Идея такая: есть сцена. есть собственный виджет построенный в дизайнере. экземпляры этого виджета должны динамически создаваться(также добавляясь на сцену) и удаляться. всё это по требаванию пользователя! Но вот такая штука они создаются,,, и показываются,,, ии удаляются если не в сцене! стоит только добавить виджет в сцену и всё его хрен удалишь! Причем хоть как хоть как: ни тебе удаляя со сцены, и даже удаляя саму сцену, ни delete wgt, ни wgt.deleteLater() отладчик не помогает вот код:
на delete и возникает неуловимое исключение, только если эти виджеты в сцене, причём пока я их не пытаюсь удалить всё нормально. (я уже подумываю так и осталять их в памяти ![]() ![]() Что не так то??? Помогите. При удалении сцена удаляет все, что в нее добавлено, в тч ваши виджеты. Получается, что вы их удаляете дважды. Вообще, размещать виджеты на сцене-не самая здравая идея, так как там не обернешься багов с прокси айтемом. Вам точно нужна сцена? Может можно обойтись кастомным лэйаутом? |
|
|
Strikevld |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 53 Регистрация: 6.9.2011 Пользователь №: 2849 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Да именно сцена. (на ней не только виджеты будут)
Хм.. дак ведь если сцену не удалять то при удалении виджетов точно тот же самый баг. И кстати проверил. при удалении сцены виджеты не удаляются.(т.е. нет "access violation" при доступе к членам класса, т.е. я в мсгбоксе вывел текст одного из лейблов на виджете который был на сцене) Хотя я не очень понял "с кастомным лайоутом". Натолкните на мысль! Посмотрю можно ли заменить сцену на него! |
|
|
Авварон |
![]()
Сообщение
#4
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Конкретно удалять виджеты должна эта
строка. То, что к полям виджета есть доступ ни о чем не говорит - память еще могла быть не использована, но уже отмечена как свободная. Попробуйте поставить бряку в деструктор виджета или вставить отладочную печать. А еще можно использовать QPointer'ы в списке для теста (и проверить их на 0 после очистки сцены). Насчет лайаута - я же не знаю, что вам надо ![]() |
|
|
Strikevld |
![]() ![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 53 Регистрация: 6.9.2011 Пользователь №: 2849 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Ухты! Благодарю за помощь! И правда всё разрушается при scene->clear();
На Qml то у меня и так этот Gui забахан уже, там проще. Но прога будет на слабых компах тоже использоваться! (Граф.интерфейс меняется динамически) Ладно! Всё клёво работает! Спасибо ![]() ![]() ![]() |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 7:16 |