Название: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: __Heaven__ от Февраль 24, 2013, 23:06 Всем привет!
У меня имеется в программе дерево с элементами. При нажатии на элемент появляется суб окно с виджетом, привязанным к нажатому элементу Код: mdiArea->addSubWindow(myWidget)->show(); Код: Unhandled exception at 0x650f448f (QtGuid4.dll) in postprocessor.exe: 0xC0000005: Access violation reading location 0xfeeeff46. Я пробовал переопределить closeEvent у QMdiSubWindow и прописать там hide() и ignore(), но это не помогло, а только привело к тому, что окно закрывается, а таб из-под него остается и становится каким-то неактивным... Как же мне решить эту проблему? Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: carrygun от Февраль 25, 2013, 05:17 Попробовать покрутить Qt::WA_DeleteOnClose.
Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: __Heaven__ от Февраль 25, 2013, 07:37 Попробовать покрутить Qt::WA_DeleteOnClose. Не имел опыта работы с этой константой. Так что и не знаю, куда её приткнуть...Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: __Heaven__ от Февраль 25, 2013, 07:52 Попробовать покрутить Qt::WA_DeleteOnClose. Попытался я что-либо сделать с этим атрибутом - получается бессмысленно.По умолчанию Qt, на сколько я знаю, вычищает память при закрытии. А этот атрибут только форсирует очистку при закрытии неглавного виджета. Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: carrygun от Февраль 25, 2013, 08:42 В документации по addSubWindow() написано с примером что и как делать.
Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: __Heaven__ от Февраль 25, 2013, 10:55 В документации по addSubWindow() написано с примером что и как делать. Ничего не помогло.У меня организовано закрытие окон в табах а также в меню. Изначально у меня было типа mdiArea->addSubWindow(myWidget)->show(); По сути, ничего удаляться из myWidget не должно при закрытии суб окна, так как при данном действии создается новое суб окно, родитель которого mdiArea и оно является вьюпортом myWidget и должно удаляться только само окно при закрытии, как я понял. Теперь попробовал создать свое суб окно: Код: QMdiSubWindow* win = new QMdiSubWindow; Всё равно, данный код от проблемы не спас... Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: __Heaven__ от Февраль 25, 2013, 11:07 Решил вопрос костылём!
Сначала сделал код Код: void MdiSubWindow::closeEvent(QCloseEvent* event) Затем добил Код: void MdiSubWindow::closeEvent(QCloseEvent* event) Всё теперь работает как и было мне надо. Возможно, это велосипед. Может быть был способ без создания наследованного класса от QMdiSubWindow? Жду продолжения развития темы. Название: Re: QMdiSubWindow запрет на удаление дочернего виджета Отправлено: __Heaven__ от Февраль 25, 2013, 11:42 Да, ещё в констукторе нужно прописать тот самый атрибут на удаление по закрытию, а то без него будет течь память.
|