![]() |
|
|
![]()
|
|
| zloyGamer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 24.2.2008 Где: аватар какает Репутация: нет Всего: нет |
создаю несколько дочерних окон myQDialog (наследников от QDialog) в QMdiArea главного окна...
все работает вроде ок.., но при удалении любого первого окна - оно просто очищается(удаляются все элементы формы) и остается просто пустое окно... но при повторном вызове этогоже метода удаления оно удаляется.., и после остальные окна при вызове этогоже метода удаляются полностью.. непонимаю в чем может быть причина? сам метод удаления нескока раз пытался править: myQDialog_window->deleteLater(); myQDialog_window->close(); delete myQDialog_window; ... //и так далее - но видимо не в нем дело, гдето остаются какието связи с этим окном раз оно не с первого раза сносится... подскажите какие типы связей мне искать, или в каком направлении копать? что может мешать удалению дочернего окна полностью и с первого раза? |
|||
|
||||
| Remiznik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: нет Всего: 1 |
на код бы посмотреть !
а то может ты случайно перегрузил функцию закрытия и отвественость за удаление легла на тебя =) |
|||
|
||||
| zloyGamer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 24.2.2008 Где: аватар какает Репутация: нет Всего: нет |
нет ничего не перегружая и никого не напрягая просто создал нов. пустой проект с 2 окнами,
в нем получается почти таже ситуация что и в исходном проекте, также после удаления висит пустое окно - которое удаляется этимже методом при его повторном вызове, а теперь внимание вопрос: почму? в архиве готовый проект, гляньте может будут какие мысли.. Присоединённый файл ( Кол-во скачиваний: 13 )
my_proj4.test.7z 2,26 Kb |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Че за радости такие?
|
|||
|
||||
| SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Может я немного не понял код, но возник вопрос. Если каждый SubWindow может пораждать другие SubWindow'ы, а переменная
Form1 *m_pForm1; - одна, то при нажатии на button2 первого окна что должно удаляться, варианты ответов:
--- Насчет того почему очищается при удалении. QMdiSubWindow - контейнер, который содержит в себе QWidget. Если ты не передаешь QMdiSubWindow в метод QMdiArea::addSubWindow, а передаешь QWidget, то QMdiArea создает контейнер сама и помещает в него твой переданный QWidget. Поэтому при вызове deleteLater() у Form1 - очищается контейнер (QMdiSubWindow::widget()), т.к. ты удаляешь виджет помещенный на нем. Всё сводится к следующему коду: //mainwindow.cpp
//form1.cpp
Происходит следующее: Добавляем свой виджет(Form1) на автоматически созданный контейнер (QMdiSubWindow) Берем возвращенный указатель на этот контейнер и устанавливаем ему флаг, чтобы при закрытии он удалялся Т.к. контейнер является временным приемным родителем, то при удалении родителя будут уничтожены все его дети (Form1) При нажатии на вторую кнопку говорим родителю совершить самоубийство (deleteLater) как только возвратимся в основной цикл событий (такое вот извращенное самоубийство через родителя). Только надо сделать полный рефакторинг кода и нормально унаследоваться от QMdiSubWindow, а то ты похоже сам запутался в своих приведениях указателя QDialog/QWidget->QMdiSubWindow. Это сообщение отредактировал(а) SABROG - 19.5.2009, 21:49 |
||||||
|
|||||||
| zloyGamer |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 24.2.2008 Где: аватар какает Репутация: нет Всего: нет |
вооот оно что, вот оно как - значит все это время она создавала новое окно типа QMdiSubWindow - и уже на нем вырисовывала мое окно QDialog, вооот блииин а я никак немог допетрить что вообще происходит, и в доках вроде никто ничего об этом не упомянул...
спасибо огромное! теперь буду знать ..., ток даж незнаю как подобные случаи в дальнейшем определять - ведь тут вообще неявно все протекало... а насчет:
- вариант в) - удалено будет последнее порожденное окно, просто ничего разумнее для примера не придумал... насамом деле в другом проекте куча куча всякого хлама + кода которые к проблеме не относятся, но всеже, вот с этим:
там тоже засада, получается что нет какогото сигнала по умолчанию для слотов on__pushButton_X__click - как отключить этот поиск стандартных сигналов для моих слотов?, я ведь сам могу все что мне надо будет подключить - отключить.. |
||||
|
|||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Внимательней читать надо:
Попробуй изменить вид слотов с on__pushButton_1__click на onPushButton1click, или любое другое но, чтобы не была форма on_xxx_имясигнала. |
|||
|
||||
| zloyGamer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 24.2.2008 Где: аватар какает Репутация: нет Всего: нет |
оп точно, спасибо огромное, совсем забыл я ведь про этот on_xxx_имясигнала уже давно читал и обильно где то юзал, склероз - маразм ...
а про:
ещё раз спасибо.. тема закрыта. Это сообщение отредактировал(а) zloyGamer - 20.5.2009, 16:53 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |