| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [qt4] загрузка одной формы в виджет другой |
| Автор: kuvshinka 17.2.2010, 15:34 |
| Совсем я заблудилась в этих классах…по-мо-ги-те разобраться раз и навсегда!!! 1. создаю в Qt Creator новый gui-проект под именем Proj1 2. задаю имя класса BaseForm, базовый класс – QMainWindow 3. на форму кладу frame1, label1 (с текстом “форма1”), PushButton1… 4. сохраняю проект… 5. теперь главное - хочу создать новую ui-форму (допустим под именем form2), добавить на нее виджеты label2 (с текстом “форма2”), Button2 и выводить эту форму form2 (загружать ее) во фрейм frame1 формы baseform.ui…В cpp-шнике формы form2 я хочу писать сигналы для виджетов (label2, Button2) данной формы. То есть хочу сделать такой “модуль” (форма + cpp-шник+хидер), подключаемый и выводимый в один из виджетов (frame1) формы главного приложения (т.е. формы baseform, которая используется как основа (контейнер) для сбора будущих различных форм (сейчас только form2)) подскажите пож-та всю программную технологию выполнения п.5 : что надо создавать дополнительно для главного приложения (меню Файл/ новый файл или проект): форму Qt designer, класс формы Qt designer, загол-ый файл С++ или что-то другое? «главный» проект с формой baseform – см. в прилагаемом архиве… Я так понимаю для этого надо использовать наследование, но совсем я заблудилась что, где и кому наследовать…помогите пож-та, ооооооооочень надо!!! заранее спасибо всем за помощь… |
| Автор: borisbn 17.2.2010, 16:12 | ||
Так не пробовала?
P.S. Я бы не наследовал простенькую форму-заготовку от QMainWindow, IMHO лучше от QWidget P.P.S. "спасибо" за exe-шник в архиве :( у меня медленный и дорогой gprs. В след. раз отправляй только исходники, плиз |
| Автор: kuvshinka 17.2.2010, 20:32 |
| borisbn: извините за экзешник...не знала... а почему лучше наследовать от QWidget, а не от QMainWindow? в чем принципиальная разница? что за класс TheMainForm? я так понимаю создается экземпляр baseForm класса BaseForm, у которого родителем указывается фрейм frame1 данной формы....а далее?а что конкретно писать вместо "сигнал" и "слот"? напоминаю - надо во frame1 формы baseform загрузить стороннюю ui-форму form2... p.s. у connect 4, а не 3 параметра: bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char *method) |
| Автор: kuvshinka 17.2.2010, 22:29 |
| ну подскажите пож-та..всю голову поломала... вот новые мои потуги....см. прилагаемый архив |
| Автор: kuvshinka 18.2.2010, 00:31 |
| ну уже осталась одна-единственная ошибочка.....help me everybody... |
| Автор: Sovereign 18.2.2010, 00:40 |
| расписывать не стал, там внутри архива все |
| Автор: kuvshinka 18.2.2010, 00:55 |
| Sovereign: спасибо Вам большое за помощь....завтра буду осознавать сей текст.... заодно подскажите ссылочку по поводу использования сигналов и слотов (ф-ия connect)... |
| Автор: Sovereign 18.2.2010, 01:02 |
| http://qtdocs.narod.ru/4.1.0/doc/html/qobject.html#connect можно и http://doc.crossplatform.ru/qt/4.5.0/qobject.html#connect но там кое-где без перевода, а так лучше ассистанта ничего нет =) |
| Автор: kuvshinka 18.2.2010, 01:09 |
| пасиба баааальшущеее...будемс читать-врубаться....все-таки очень непривычная такая технология сигналов и слотов- в том же делфи - выбрал компонент и получи например весь список возможных обработчиков событий, а тут....вес как "в малаховку через одессу"... ну да ладно...изучим.... |
| Автор: borisbn 18.2.2010, 07:38 |
| Да, я сразу не понял что надо - ерунду написал. У Sovereign всё правильно сделано. А по поводу connect имеет несколько форм (перегруженная ф-ция). если 3-й параметр должен быть this (т.е. сигнал связывается со слотом из объекта, вызывающего connect), то его можно опустить QObject::connect ( const QObject * sender, const char * signal, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) Equivalent to connect(sender, signal, this, method, type). |
| Автор: kuvshinka 18.2.2010, 20:44 |
| Теперь хочу наоборот - установить connect от form2 к mainwindow (при установленном флажке в checkBox формы form2 хочу вывести произвольную строку в label1 на форме mainwindow, иначе – вывести пустую строку). Для этого надо в form2.h подключить mainwindow.h, создать экземпляр класса mainwindow и т.д. – но почему-то уже на таком первом простом действии (один лишь #include "mainwindow.h") возникают ошибки и предупреждения…в чем теперь тут дело? См. приложенный архив….он без экзешника…. И еще хотелось бы, чтобы при загрузке form2 ее размеры подгонялись бы под размеры фрейма frame (он на форме mainwindow), в который идет вывод формы. (то есть какого бы размера ни был бы фрейм, form2 точно должна совпадать с ним по размерам (занимать полностью пространство фрейма) ). |
| Автор: kuvshinka 20.2.2010, 23:22 |
| ну подскажите пож-та - почему из одной офрмы к другой могу обращатсья, а наоборот (при простом подключении соответствующего хидера файла) - нет - см. архив программы из предыдущего моего сообщения данной темы.... |