Russian Qt Forum
Октябрь 01, 2024, 00:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Связь объектов  (Прочитано 3765 раз)
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)));

все запускается , а значение не передается, в этом то и вопрос что не так...?! Непонимающий Непонимающий Непонимающий
Записан
mutineer
Гость
« Ответ #1 : Октябрь 16, 2012, 10:13 »

В консоль что-нить пишет?
Записан
LEO
Гость
« Ответ #2 : Октябрь 16, 2012, 10:19 »

ничего не пишет, все запускается, но текст не передается Грустный
Записан
mutineer
Гость
« Ответ #3 : Октябрь 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();
 

Ничего странным не кажется?
Записан
Bepec
Гость
« Ответ #4 : Октябрь 16, 2012, 10:46 »

Наверно просто не хватает понимания того, что 2 объекта одного типа являются РАЗНЫМИ объектами, каждый со своими данными и сигналами.
Записан
LEO
Гость
« Ответ #5 : Октябрь 16, 2012, 10:51 »

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

как я понял ошибка в названиях окон...
сделал так QObject::connect(dial, SIGNAL(Text(QString)), &window, SLOT(changeText(QString)));
не работает


Ошибка не в названии окон, а в том, что приконнектился ты к одному окну, а на экране показываешь совершенно другое
Записан
LEO
Гость
« Ответ #7 : Октябрь 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();
    }
проблема осталась
Записан
mutineer
Гость
« Ответ #8 : Октябрь 16, 2012, 11:14 »

конечно осталась
Код:
if(dial->exec()== QDialog::Accepted)
После этой строчки диалог уже закрылся и на кнопку для отправки сигнала нажать уже нельзя. А до этой строки не существует ни целевого окна, ни соединения
Записан
LEO
Гость
« Ответ #9 : Октябрь 16, 2012, 11:18 »

понял, огромное спасибо что поэтапно навели на цель...
 Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 17.