Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: uckpeHHeBauu от Октября 12, 2005, 10:45



Название: немодальные диалоги в qt требуется помощь
Отправлено: uckpeHHeBauu от Октября 12, 2005, 10:45
есть основная форма MainForm из нее вызывается SecondForm
требуется выполнить слот по сигналу (нажатию кнопки) из SecondForm в MainForm.

просто не знаю как подступиться ()






просьба не бить ногами а помочь, очень надо


Название: немодальные диалоги в qt требуется помощь
Отправлено: Racheengel от Октября 12, 2005, 17:00
Честно говоря, не понял, в чем проблема? Делаешь слот в MainForm и коннектишь его в конструкторе к сигналу Clicked кнопки...


Название: немодальные диалоги в qt требуется помощь
Отправлено: uckpeHHeBauu от Октября 12, 2005, 17:10
Цитата: "Racheengel"
Честно говоря, не понял, в чем проблема? Делаешь слот в MainForm и коннектишь его в конструкторе к сигналу Clicked кнопки...


мне нужно вызвать слот из SecondForm (сам слот принадлежит MainForm)

т.е.

есть MainForm

MainForm::viewForm()
{
SecondForm * seco = seco (this);
seco.exec();
}

MainForm::addConst()
{
QInt a;

a=1;
}

и есть форма SecondForm

SecondForm::changeConst()
{
//Вот здесь надо как то вызвать addConst()
//и передать ей значение переменной, на край хотя бы как вызвать ?
}

HELP HELP ну очень надо


Название: немодальные диалоги в qt требуется помощь
Отправлено: lepsai от Октября 12, 2005, 17:26
MainForm::addConst(const int & myConst)
{
    do it
}

SecondForm::changeConst()
{
MainFr * pParent = dynamic_cast<MainForm*>(parentWidget());
if(pParent)
pParent->addConst(number);
}


Название: немодальные диалоги в qt требуется помощь
Отправлено: uckpeHHeBauu от Октября 12, 2005, 17:32
lepsai Спасибо !


Название: немодальные диалоги в qt требуется помощь
Отправлено: Racheengel от Октября 13, 2005, 09:36
Понятно, но я обычно по другому делаю. Т.к. MainForm у нас один :) я указатель на него делаю как статическая переменная и экспортирую куда угодно... и строчки типа dynamic_cast<MainForm*>(parentWidget());
не нужны нафиг тогда...


Название: немодальные диалоги в qt требуется помощь
Отправлено: uckpeHHeBauu от Октября 13, 2005, 10:12
Цитата: "Racheengel"
Понятно, но я обычно по другому делаю. Т.к. MainForm у нас один :) я указатель на него делаю как статическая переменная и экспортирую куда угодно... и строчки типа dynamic_cast<MainForm*>(parentWidget());
не нужны нафиг тогда...


А можно поподробнее на эту тему ? Или ссылочку на операторы дать ?


Название: немодальные диалоги в qt требуется помощь
Отправлено: crocus от Октября 14, 2005, 05:41
Может поможет
this-это MainWindow,
myClass-потомок QWidget
Это из класса

connect(myClass, SIGNAL(exec(const QString &)), this, SLOT(on_find(const QString &)));
  А это в класс  
connect(this, SIGNAL(Abon(const QString &, const QString &, const QString &,
                              const QString &, const QString &)), myClass, SLOT(currentAbonChanged(const QString &, const QString &, const QString &, const QString &, const QString &)));
 в вызываемом классе  при нажатии кнопки сигнал                        
emit exec(Quer); где Quer- QString уже получивший значение


Название: немодальные диалоги в qt требуется помощь
Отправлено: Dair от Октября 17, 2005, 07:58
Цитата: "lepsai"
SecondForm::changeConst()
{
MainFr * pParent = dynamic_cast<MainForm*>(parentWidget());
if(pParent)
pParent->addConst(number);
}


Да, сработает, но imho совершенно не "прозрачно".

Qt-way, как мне видится, как crocus написал. Ну, или примерно так.

(объявления пропускаю за очевидностью)
Код:

MainForm::MainForm( QWidget * parent, const char * name )
  : QWidget( parent, name )
{
  secondForm = new SecondForm( this );
  connect( secondForm, SIGNAL( changeConst( QInt ) ), this, SIGNAL( addConst( QInt ) ) );
}

...

SecondForm::SecondForm( QWidget * parent, const char * name )
  : QWidget( parent, name )
{
  connect( myBytton, SIGNAL( clicked() ), this, SLOT( myButtonClicked() ) );
  ...
}

void SecondForm::myButtonClicked()
{
  QInt i = 2;
  emit changeConst( i );
}


а? Мне кажется, более понятно, что и как происходит :-)