Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, 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
Так не пробовала?
Код

#include "baseform.h"

TheMainForm::TheMainForm( QWidget * p )
: QMainForm( p )
{
    ui.setupUi( this );
    BaseForm * baseForm = new BaseForm( ui.frame1 ); // <- Здесь самое главное
    connect( baseForm, SIGNAL( сигнал ), SLOT( слот ) );
}


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 всё правильно сделано.
А по поводу
Цитата(kuvshinka @  17.2.2010,  20:32 Найти цитируемый пост)
p.s. у connect 4, а не 3 параметра

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
ну подскажите пож-та - почему из одной офрмы к другой могу обращатсья, а наоборот (при простом подключении соответствующего хидера файла) - нет - см. архив программы из предыдущего моего сообщения данной темы....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)