Название: Проблемы при вызове формы Отправлено: Henior от Октября 25, 2011, 12:22 Всем привет! Сделал вызов формы из главной формы при нажатии на кнопку, но создается новая форма, а не вызыватся нужная. В чем может быть проблема?
Заголовочный файл основной формы formgen.h Код
Файл основной формы formgen.cpp Код
Название: Re: Проблемы при вызове формы Отправлено: Nimbus от Октября 25, 2011, 12:42 создается новая форма, а не вызыватся нужная. Не понятно чего вы хотитеНазвание: Re: Проблемы при вызове формы Отправлено: Henior от Октября 25, 2011, 12:46 Есть две формы, одна нлавная, вторая дочерняя, я хочу, чтобы при нажатии кнопки на главной форме вызывалась дочерняя. Сейчас у меня при нажатии кнопки на главной форме создается новая форма, а не вызывается дочерняя. Я хочу понять в чем я ошибся?
Название: Re: Проблемы при вызове формы Отправлено: kambala от Октября 25, 2011, 12:52 для начала надо определиться как связывать элементы UI с классом - через член-указатель или множественное наследование, а у тебя и то и то одновременно. судя по коду в реализации, используется именно первый подход, так что из class FormGen : public QWidget, Ui::FormGen надо выкинуть Ui::FormGen. да и Ui:: не нужно писать для FormGen т.к. у тебя в начале объявлен namespace.
а что такое "нужная форма"? какого она должна быть класса? сейчас код написан нормально и так. в цпп #include "ui_formgen.h" абсолютно не нужно (а вот в заголовочном файлы ui_*.h как раз лучше писать в кавычках а не в угловых скобках). да и #include <Qt> - тоже плохой подход, лучше включать непосредственно используемые классы (в текущем случае дополнительно подключать ничего не нужно, по крайней мере сейчас). Название: Re: Проблемы при вызове формы Отправлено: Янковский Александр от Октября 25, 2011, 13:05 Цитировать void FormGen::button_click_help() { FormHelp *formh = new FormHelp(); formh->show(); formh->activateWindow(); // formh->setAttribute(QT::WA_DeleteOnClose); } А что тут непонятного? Каждый раз создается новая форма! Нужно ее при первом вхождении в слот создать и запомнить указатель на нее! Указатель на форму объявить в качестве закрытого члена класса, по умолчанию в конструкторе выставить в 0. А в данном слоте запомнить! Ну и естественно при вхождении проверять на 0. Примерно такой рецепт Название: Re: Проблемы при вызове формы Отправлено: Bepec от Октября 25, 2011, 13:07 Эх вы, знатоки, тут же человек простого хочет.
По теме: Теперь объясняю: строка Код: FormHelp *formh = new FormHelp(); создает у тебя новый экземпляр дочернего окна. Ты же хочешь, чтобы оно было одно, так и надо создавать его только 1 раз - в конструкторе, и потом обращаться к нему по указателю. Код: #ifndef FORMGEN_H Код: #include "formgen.h" Изменены 3 строчки, попробуй и все получится! ;) Название: Re: Проблемы при вызове формы Отправлено: Bepec от Октября 25, 2011, 13:08 Мудрецы блин, человек только изучать начал, а вы его уже грузите.
to Henior - пользуй мой пример и разбирайся потихоньку. Название: Re: Проблемы при вызове формы Отправлено: Янковский Александр от Октября 25, 2011, 13:12 Мудрецы блин, человек только изучать начал, а вы его уже грузите. to Henior - пользуй мой пример и разбирайся потихоньку. Есть и в твоих словах, Bepec, смысл. :) Название: Re: Проблемы при вызове формы Отправлено: Henior от Октября 25, 2011, 14:12 Почти заработало) Только теперь ругается на строчку FormHelp *formh(
ошибка: ‘FormHelp’ не является именем типа Название: Re: Проблемы при вызове формы Отправлено: Henior от Октября 25, 2011, 14:39 Разобрался с этой проблемой, но вернулась проблема №1, создается новая форма при нажатии кнопки на главной форме.
Название: Re: Проблемы при вызове формы Отправлено: Bepec от Октября 25, 2011, 14:44 Henior. я тебе написал работоспособный пример, вызывающий 1(одну (одну одинешенькую)) форму. Ты его компилил?
Название: Re: Проблемы при вызове формы Отправлено: loneybibi от Октября 25, 2011, 15:03 Вот еще один пример который создает и вызывает одну и туже (даже при следующем вызове форму) которая сохраняет свое состояние.
Название: Re: Проблемы при вызове формы Отправлено: Henior от Октября 25, 2011, 15:13 Все заработало) Всем спасибо) Особенно Верес)
|