Russian Qt Forum

Qt => Общие вопросы => Тема начата: sasha111 от Сентябрь 09, 2010, 13:05



Название: Связь дочернего и родительского окна
Отправлено: sasha111 от Сентябрь 09, 2010, 13:05
Имею 2 формы, родительскую и дочернюю, хочу сделать чтоб по клику на кнопке в дочернем окне, в родительском окне поменялся текст в label. Перерыл весь инет(((


Название: Re: Связь дочернего и родительского окна
Отправлено: Denjs от Сентябрь 09, 2010, 13:13
надо: читать про сигнал слоты.
  http://qtdocs.narod.ru/4.1.0/doc/html/signalsandslots.html
  http://www.qtinfo.ru/signalsandslots

надо: читать Qt Assisant.
надо: смотреть и разбирать демы и примеры в комплекте с QT
 http://qtdocs.narod.ru/4.1.0/doc/html/tutorial-t2.html
 http://qtdocs.narod.ru/4.1.0/doc/html/tutorial-t5.html

Потом если будет что не понятно - задавайте вопросы.


Название: Re: Связь дочернего и родительского окна
Отправлено: developer от Сентябрь 09, 2010, 17:03
Допустим у тебя есть парент виджет, который генерит дочерний виджет. Тогда дочернему виджету передай ссылку на парента.

где-то так:
//In child widget
QWidget* parentWidget;
void funct(QWidget* parent){
      parentWidget = parent;
      connect(pushButton, SIGNAL("clicked()"), parent, changeLabel());
}

void changeLabel(){
       parentWidget->changeLabel("Any text you want");
}

Ето псевдокод, но надеюсь идея понятна


Название: Re: Связь дочернего и родительского окна
Отправлено: Denjs от Сентябрь 09, 2010, 17:14
а если правильнее то - надо генерировать сигнал с сигнатурой типа mySignal(QString).

т.е.
Код:
void childWidget::obButtonClickSlot()
{
       emit mySignal("Any text you want");
}

Этот сигнал предварительно подключить к слоту QLabel::setText(QString).
Код:
QObject::connect(childWidgetObject,SIGNAL(mySignal(QString)), parenWidgetQLabel, SLOT(setText(QString));