Russian Qt Forum

Qt => Вопросы новичков => Тема начата: LEO от Октябрь 16, 2012, 09:48



Название: Связь объектов
Отправлено: LEO от Октябрь 16, 2012, 09:48
Здравствуйте, вопрос следуещего характера, имеется 2 формы, в одной lineedit, который передает текстовое значение в QLabel другой формы, связь между ними делаю через сигналы и слоты, в диалоговом .h файле прописываю:
Код:
signals:
    void Text(QString);
в файле .h основного окна пишу
 
Код:
private slots:
void changeText(QString );
реализация слота в cpp файле основного окна :
Код:
void Widget::changeText(QString text)
{
    ui->label_5->setText(text);
}

в cpp файле диалогового окна для сигнала прописываю следующее:
Код:
void Dialog::on_pushButton_clicked()
{
     emit Text(ui->lineEdit->text());
     auth();

}

в main.cpp делаю связь между объектами сл. образом:

Код:
    Widget w;
    Dialog d;

    QObject::connect(&d, SIGNAL(Text(QString)), &w, SLOT(changeText(QString)));

все запускается , а значение не передается, в этом то и вопрос что не так...?! ??? ??? ???


Название: Re: Связь объектов
Отправлено: mutineer от Октябрь 16, 2012, 10:13
В консоль что-нить пишет?


Название: Re: Связь объектов
Отправлено: LEO от Октябрь 16, 2012, 10:19
ничего не пишет, все запускается, но текст не передается :(


Название: Re: Связь объектов
Отправлено: mutineer от Октябрь 16, 2012, 10:36
Код
C++ (Qt)
   Widget w;
   Dialog d;
 
   QObject::connect(&d, SIGNAL(Text(QString)), &w, SLOT(changeText(QString)));
 
...
 
   Widget window;
   window.setWindowState(Qt::WindowMaximized);
   window.show();
 

Ничего странным не кажется?


Название: Re: Связь объектов
Отправлено: Bepec от Октябрь 16, 2012, 10:46
Наверно просто не хватает понимания того, что 2 объекта одного типа являются РАЗНЫМИ объектами, каждый со своими данными и сигналами.


Название: Re: Связь объектов
Отправлено: LEO от Октябрь 16, 2012, 10:51
как я понял ошибка в названиях окон...
сделал так QObject::connect(dial, SIGNAL(Text(QString)), &window, SLOT(changeText(QString)));
не работает


Название: Re: Связь объектов
Отправлено: mutineer от Октябрь 16, 2012, 10:56
как я понял ошибка в названиях окон...
сделал так QObject::connect(dial, SIGNAL(Text(QString)), &window, SLOT(changeText(QString)));
не работает


Ошибка не в названии окон, а в том, что приконнектился ты к одному окну, а на экране показываешь совершенно другое


Название: Re: Связь объектов
Отправлено: LEO от Октябрь 16, 2012, 11:09
ну, раньше было widget w; dialog d;я их соединял между собой, а потом выводил widget window; который не имеет к ним никакого отношения, сейчас делаю:
Код:
  QApplication app(argc, argv);
    Dialog * dial=new Dialog;
   
    if(dial->exec()== QDialog::Accepted)
    {
    if (!createConnection());
    Widget window;
    QObject::connect(dial, SIGNAL(Text(QString)), &window, SLOT(changeText(QString)));
    window.setWindowState(Qt::WindowMaximized);
    window.show();
    return app.exec();
    }
проблема осталась


Название: Re: Связь объектов
Отправлено: mutineer от Октябрь 16, 2012, 11:14
конечно осталась
Код:
if(dial->exec()== QDialog::Accepted)
После этой строчки диалог уже закрылся и на кнопку для отправки сигнала нажать уже нельзя. А до этой строки не существует ни целевого окна, ни соединения


Название: Re: Связь объектов
Отправлено: LEO от Октябрь 16, 2012, 11:18
понял, огромное спасибо что поэтапно навели на цель...
 ;)