Russian Qt Forum
Ноябрь 26, 2024, 16:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как сделать несколько диалоговых окон в приложении  (Прочитано 9070 раз)
savigm
Гость
« : Январь 09, 2010, 18:09 »

Подскажите пожалуйста: как в kdevelop сделать несколько диалоговых окон, чтобы в начале запускалось первое, по нажатию кнопки появилось второе окно, первое при этом закрылось, по нажатию кнопки во втором окне чтобы переключались опять в первое, а второе при этом закрылось?
Записан
Awejk
Гость
« Ответ #1 : Январь 09, 2010, 20:14 »

Я как раз хотел создать похожую тему, только у меня проблемы при добавлении новой формы в Visual Studio 2005. При помощи QTCreator создаю вторую форму, по сути создаю проект, он мне генерит все нужные классы к этой форме. Затем беру .ui .cpp и .h  и копирую в папку с проектом для Studio. Затем в самой студии добавляю эти файлы в проект, затем нужно настроить проперти для нового ui файла, копируем все настройки со старой формы. Если после этого запустить апликэйшен то получю несколько ошибок, одна из них

unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Preview::metaObject(void)const " (?metaObject@Preview@@UBEPBUQMetaObject@@XZ)

думаю, что эта ошибка из-за того, что для моей новой добавленной формы не генерируется moc файл. Если просмотреть *.vcproj то увидим что для новой формы не прописаны настройки moc. А для старой формы они есть. Можно попробывать в самом файле добавить их, но не хотелось бы править файл руками. Ведь должно же где-то в настройках студии это задаваться. Но где?

А может есть способ по проще добавления новой формы для студии?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #2 : Январь 09, 2010, 20:35 »

Цитировать
А может есть способ по проще добавления новой формы для студии?
Надо поставить интегратор для студии - для версии 4.6.0 или для версии 4.5.3. Для студии версии Express этот вариант не подходит - она не поддерживает аддоны. Хотя в свое время для Qt3 решал эту проблему с помощью своих Custom Build Rules.
« Последнее редактирование: Январь 09, 2010, 20:43 от Hellraiser » Записан
savigm
Гость
« Ответ #3 : Январь 09, 2010, 20:43 »

я примерно разобрался, но проблема в следующем:
1. по нажатию кнопки в первом окне создаю объект класса второго окна, отображаю его и скрываю первое окно:
Код:
SecondDlg *seconddlg = new SecondDlg;
seconddlg->show();
firstDlg->hide();
2. по нажатию кнопки во втором окне надо закрыть второе, отобразить первое и переключиться в него, вот здесь пока не знаю как это сделать:
Код:
firstDlg->show();

show не отображает первое окно вновь, не знаю как закрыть второе окно по нажатию кнопки???
Записан
Awejk
Гость
« Ответ #4 : Январь 09, 2010, 20:46 »

2Hellraiser
интегратор для 4.6.0 я уже поставил, но встал криво. Нет дополнительного пункта меню QT, хотя QT проект создать можно. Попробую поставить для 4.5.3.

Отвечу на свой вопрос(без интегратора)

qmake -project (обновили .pro с учётом новых файлов)
qmake -tp -vc (обновили .vcproj)

и новая форма добавлена в проект корректно.
Записан
zenden
Гость
« Ответ #5 : Январь 10, 2010, 12:02 »

а интегратор для qt 4.6.0 поддерживает редактирование виджетов прямо внутри окна Visual Studio?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #6 : Январь 10, 2010, 12:56 »

Только для обладателей коммерческой версии. Бесплатный только вызывает стандартный дизайнер.
Записан
Awejk
Гость
« Ответ #7 : Январь 10, 2010, 20:37 »

Если в главном окне создать вторую форму, то что бы во второй форме получить доступ к контролам первой формы, нужно через отдельный метод или через конструктор передать главное окно?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Январь 10, 2010, 21:12 »

можно и так, но это плохой стиль.
Лучше, если главная форма сама достанет что ей надо, из дочернего класса
Записан
Awejk
Гость
« Ответ #9 : Январь 10, 2010, 21:29 »

Пользователь нажал на кнопку на второй форме и мне нужно вызвать метод из первой формы. Не предстовляю как ещё это можно сделать, как не передать MainWindow второй форме. Плохая архитектура приложения?
Записан
BRE
Гость
« Ответ #10 : Январь 10, 2010, 21:32 »

Пользователь нажал на кнопку на второй форме и мне нужно вызвать метод из первой формы. Не предстовляю как ещё это можно сделать, как не передать MainWindow второй форме. Плохая архитектура приложения?
Не вдаваясь в обсуждения архитектуры....

В первой форме сделать слот и соединить сигнал от кнопки на второй форме с этим слотом.
Записан
Awejk
Гость
« Ответ #11 : Январь 10, 2010, 21:42 »

Цитировать
В первой форме сделать слот и соединить сигнал от кнопки на второй форме с этим слотом.
у меня была такая идея, но её сразу откинул, т.к. не знал как такое сделать для кнопок находящихся на разных формах. Не будет ли маленького примера?
Записан
Awejk
Гость
« Ответ #12 : Январь 10, 2010, 21:54 »

а ну всё кажется понял
connect(mPreviewForm->ui->stopRecording, SIGNAL(clicked()), this, SLOT(on_startButton_clicked()));

только мне пришлось паблик сделать ui. Или это тоже плохой стиль программирования?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #13 : Январь 10, 2010, 21:56 »

Если взять за основу код из предыдущих постов, то примерно так (чтобы не делать элементы интерфейса пабликом):
Код:
SecondDlg *seconddlg = new SecondDlg;
connect(seconddlg, SIGNAL(buttonPressed()), this, SLOT(mySlot()));
seconddlg->show();
firstDlg->hide();
В конструкторе SecondDlg пишем (после создания кнопки):
Код:
connect(myButton, SIGNAL(clicked()), this, SIGNAL(buttonPressed()));
и определить сигнал buttonPressed() в заголовочнике SecondDlg.
« Последнее редактирование: Январь 10, 2010, 22:01 от Hellraiser » Записан
Awejk
Гость
« Ответ #14 : Январь 10, 2010, 22:03 »

2Hellraiser
интересная цепочка получилась, хоть не надо будет паблик делать. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.128 секунд. Запросов: 23.