Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Две формы в QT |
Автор: Aline 10.6.2013, 09:58 |
Начинаю изучать QT. Есть задание: создать 2 произвольных *.ui файла, т.е. две формы. В каждой из них расположить по кнопке, при нажатию на которую происходит переход к другой форме. Т.е. из первой формы можно вызвать вторую,а из второй первую. Проблема пока даже не в том , чтобы создать или вызвать форму,а в том, чтобы подключить к проекту. Т.е. я создала проет, там у меня уже есть одна форма (класс Widget), добавляю вторую форму, но добавляется только *.ui файл, никакого хедера и исходника не вижу для второй формы. Как правильно добавить вторую форму в проект и как их связать? Если даже при попытке обработки события clicked() по кнопке на второй форме, мне пишет, что не удалось найти документы соответствующие "ui_form.h". Можно пошагово объяснить как это сделать? Единственное, что я поняла, это надо объявить переменную типа этой формы и для вызова формы написать вот так: f2 = new form(this); this->hide(); f2->show(); |
Автор: Aline 10.6.2013, 10:21 |
Уже нашла ответ на свой вопрос: казывается при добавлении формы в проект, надо выбирать не просто форму,а класс формы |
Автор: Aline 10.6.2013, 10:54 | ||
Нет, всё таки не до конца решила проблему: из первой формы я могу вызвать вторую и даже могу скрыть первую:
но как теперь из второй формы снова вызвать первую и при этом закрыть вторую? Т.е. мне надо переключать интерфейс с формы 1 на форму 2 и обратно |
Автор: math64 10.6.2013, 11:30 | ||
Создай свой класс Application:
то же самое можно сделать в MainWindow |
Автор: Aline 10.6.2013, 11:36 |
math64, спасибо конечно, но еще бы знать как создавать свой класс и самое главное где ![]() Должно быть как то проще всё, т.к. это задание по первому дню курсов, мне дали видео с этого курса. там объяснялось только как вызвать диалог из формы и я так понимаю,что задание надо выполнить основываясь на то,что объясняли. Про создание класса там не было ничего. С другой стороны узнать как создается класс - мне совсем не помешает |
Автор: ilyuha 10.6.2013, 11:44 | ||||||
Aline, Ну, например, можно в классе второй формы определить сигнал:
Испускать его при закрытии:
Ловить в первой форме:
И обрабатываете как хотите в onForm2Closed() |
Автор: math64 10.6.2013, 11:44 | ||
Проще - делай мой код в MainWindow. Как создавать класс формы, как я понял, ты научилась.
ЗЫ: form1->ui по умочанию в секции private. Поэтому нужно либо объявить MainWindow другом, либо добавить в Form1 метод getButton1() (лучший вариант), либо перенести connect() кнопки со слотом в конструктор Form1. В этом случае тип parent для Form1 нужно поменять на MainWindow, чтобы получить доступ к слоту. |
Автор: Aline 10.6.2013, 12:39 |
что то я окончательно во всем запуталась, надо делать всё сначала и постепенно ![]() |
Автор: math64 10.6.2013, 13:54 | ||
1. В главной форме две кнопки - button1 и button2, открывающие Form1 и Form2 соответственно. При повтоном нажатии открывается форма, созданная в первый раз. Для этого создаются поля form1 и form2. Для Form1 и Form2 задается родителем MainWindow, поэтому они будут удалены автоматически при закрытии MainWindow. 2. В Form1 при нажатии на button1 нужно открыть Form2. Для этого нужно соединить её со слотом главной формы. Если это сделать в своём слоте, формы будут множится (хотя и видна буден только одна из них). 3. Аналогично для кнопки в Form2. Или я не правильно понял задачу? Добавлено @ 14:01 Вот так можно делать connect() сигнала кнопки в диалоге со слотом главного окна, если не понятно:
|
Автор: ilyuha 10.6.2013, 14:04 |
math64, Как я понял, на каждой форме по одной кнопке, каждая из которых должна скрывать текущую форму и открвать другую. Поэтому, я и предложил тупо ловить сигнал закрытия второй формы |
Автор: math64 10.6.2013, 14:24 | ||
Если главной формы нет, тогда
(коды методов нужно вынести в cpp файл, объявления классов о отдельные h файлы) |
Автор: Aline 11.6.2013, 08:07 |
math64, да, главной формы вроде нет, задание звучит так, что формы по нажатию на кнопку должны переключаться между собой. Вот здесь можно посмотреть задание: http://www.zmartzoft.ru/projects/qtinception/attachment/wiki/day1/hometask_1.pdf Задание №5 |