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