Название: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: mikhail_t от Апрель 06, 2011, 10:36 Здравствуйте.
Есть: Dialog1 и Dialog2, унаследованные от QDialog. Задача: из Dialog1 вызвать Dialog2, при этом dialog1 на время показа dialog2 должен быть скрыт. Зачем: во время заполнения Dialog2 пользователь должен видеть QGraphicsScene, а большой Dialog1 перекрывает ее почти всю Решение: см. код Результат: после закрытия Dialog2 на мгновение появляется Dialog1 и тут же исчезает. Просьба: подскажите пожалуйста, в чем я ошибаюсь. void Dialog1::showDialog2() { // Прячу dialog1. Спрятался. setVisible(false); // Вызываю Dialog2. Появился. Dialog2* d = new Dialog2(this); int result = d->exec(); if (result == 1) { // забираю данные из вызванной формы } // Делаю Dialog1 видимым. На мгновение появился и пропал setVisible(true); } Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: Пантер от Апрель 06, 2011, 10:43 Не должно. Может у тебя приложение падает?
Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: mikhail_t от Апрель 07, 2011, 01:47 Нет, приложение у меня не падает.
Могу даже сказать следующее: Dialog1 пропадает, но не уничтожается. Потому что после приведенного фрагмента кода я могу обратиться к его нестатическим методам и приложение не падает (т.е. объект Dialog1 существует). Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: Пантер от Апрель 07, 2011, 07:23 Приложи минимальный компилябельный пример.
Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: mikhail_t от Апрель 07, 2011, 12:00 Минимальный пример, в котором только два диалога, работает нормально. А проблема такая возникает в большом проекте (сетевой симулятор). Выкладывать сюда проект размером в полсотни классов (мой труд в течение 6 месяцев) - никто разбираться не будет. Основное отличие минимального проекта от большого - в большом Dialog1 вызывается по клику на QGraphicsItem. Все, больше я не вижу никаких отличий и это озадачивает.
Я понимаю, что при такой скудной информации посоветовать что-то сложно. Поэтому, буду благодарен, если Вы просто предположите несколько причин, по которым такая проблема может возникать теоретически. А я уж сам их проработаю на практике. Если нет, то, думаю, тему можно закрывать, так как здесь для других полезного ничего не будет. Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: Пантер от Апрель 07, 2011, 12:07 Покажи код вызова Dialog1.
Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: mikhail_t от Апрель 07, 2011, 12:25 Код: Dialog1* dialog1 = new Dialog1(); Т.е. пользователь щелкает 2 раза по QGraphicsItem'у, и в обработчике выполняется этот код. Родитель для Dialog1 не назначаю, так как элемент сцены не является QWidget'ом. Название: Re: Как спрятать QDialog, когда из него вызывается другой QDialog Отправлено: mikhail_t от Сентябрь 10, 2011, 16:06 Совершенно случайно наткнулся на решение позабытой проблемы. Нужно делать так:
Код: void Dialog1::showDialog2() Вдруг кто-то тоже столкнется с этой проблемой. |