Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Raumnur от Июль 14, 2016, 12:23



Название: Передача данных от модального окна главному
Отправлено: Raumnur от Июль 14, 2016, 12:23
Привет всем!
Есть 2 окна MainWindow и Dialog. Диалог- модальное окно. На нем есть 4 lineEdit, и нужно при accepted передать данные введенные в эдиты соответственно в 4 лейбла на главном окне. Выручайте ребят. С сигналами/слотами как то туго.

dialog.cpp
Код:
void Dialog::on_buttonBox_accepted()
{
    QString s1,s2,s3,s4;
    s1=ui->lineEdit_5->text();
    s2=ui->lineEdit_6->text();
    s3=ui->lineEdit_7->text();
    s4=ui->lineEdit_8->text();
}

mainwindow.cpp

конект. myform - диалоговое окно.

Код:
 connect(myform, SIGNAL(accepted()), this, SLOT(Dan(QString,QString,QString,QString)));

и слот
Код:
void MainWindow::Dan(QString s1, QString s2, QString s3, QString s4)
{
    ui->label_2->setText(s1);
    ui->label_3->setText(s2);
    ui->label_4->setText(s3);
    ui->label_5->setText(s4);
}

Программа запускается. Вызываю окно, ввожу данные, кликаю ОК и лейблы остаются неизменными. В чем беда?


Название: Re: Передача данных от модального окна главному
Отправлено: PimenS от Июль 14, 2016, 12:38
Как вариант, вы можете написать свой сигнал, который будет данные формы передавать. Тогда можно так:

Код:
connect(myform, SIGNAL(mySignal(QString,QString,QString,QString)), this, SLOT(Dan(QString,QString,QString,QString)));

Но мне больше нравится через запрос. По принципу QInputDialog::getText


Название: Re: Передача данных от модального окна главному
Отправлено: GreatSnake от Июль 14, 2016, 13:02
В чем беда?
Беда в том, что при вызове слота в него передаются аргументы сигнала. А разве accepted() имеет агрументы?


Название: Re: Передача данных от модального окна главному
Отправлено: Raumnur от Июль 14, 2016, 13:05
Как вариант, вы можете написать свой сигнал, который будет данные формы передавать. Тогда можно так:

Код:
connect(myform, SIGNAL(mySignal(QString,QString,QString,QString)), this, SLOT(Dan(QString,QString,QString,QString)));

Сигнал сделал, но результат тот же...


Название: Re: Передача данных от модального окна главному
Отправлено: PimenS от Июль 14, 2016, 13:06
Как вариант, вы можете написать свой сигнал, который будет данные формы передавать. Тогда можно так:

Код:
connect(myform, SIGNAL(mySignal(QString,QString,QString,QString)), this, SLOT(Dan(QString,QString,QString,QString)));

Сигнал сделал, но результат тот же...

Как вы его используете? Код покажите где он испускается.

ЗЫ. Вам лучше почитать раздел Signals & Slots, там все очень понятно разъяснено.


Название: Re: Передача данных от модального окна главному
Отправлено: Igors от Июль 14, 2016, 13:56
Объявить сигнал (напр SignalPassText), связать его с MainWindow::Dan и испустить этот сигнал здесь
Код
C++ (Qt)
void Dialog::on_buttonBox_accepted()
{
   QString s1,s2,s3,s4;
   s1=ui->lineEdit_5->text();
   s2=ui->lineEdit_6->text();
   s3=ui->lineEdit_7->text();
   s4=ui->lineEdit_8->text();
   emit SignalPassText(s1, s2, s3, s4);
}
 

И еще плохо что массированная передача строк по значению не вызывает никакой реакции/замечаний, "ничего, и так сойдет"


Название: Re: Передача данных от модального окна главному
Отправлено: Racheengel от Июль 14, 2016, 14:05
lazy sharing же...


Название: Re: Передача данных от модального окна главному
Отправлено: GreatSnake от Июль 14, 2016, 14:13
lazy sharing же...
Наверное всё-таки implicit sharing  ;)


Название: Re: Передача данных от модального окна главному
Отправлено: Raumnur от Июль 14, 2016, 14:15
И еще плохо что массированная передача строк по значению не вызывает никакой реакции/замечаний, "ничего, и так сойдет"

Вот этого замечания не понял, все настолько плохо? :)

А так в целом разобрался, все передает...теперь =D Спасибо)))


Название: Re: Передача данных от модального окна главному
Отправлено: gil9red от Июль 14, 2016, 14:18
И еще плохо что массированная передача строк по значению не вызывает никакой реакции/замечаний, "ничего, и так сойдет"

Вот этого замечания не понял, все настолько плохо? :)

А так в целом разобрался, все передает...теперь =D Спасибо)))

Вместо QString используйте const QString& и Igors будет доволен ;)


Название: Re: Передача данных от модального окна главному
Отправлено: Igors от Июль 14, 2016, 14:33
lazy sharing же...
Сначала начинающий должен четко усвоить что подача структур по значению = западло. Да и возврат, строго говоря, тоже. Поэтому не надо сообщать об исключениях из правила которое еще не усвоено  :)

Вместо QString используйте const QString& и Igors будет доволен ;)
Не буду  :) 4 параметра - это много, громоздко, неудобно. Напрашивается слить их в QStringList и его уже красиво передавать

Вот этого замечания не понял, все настолько плохо? :)
Ну пока неважно  :)





Название: Re: Передача данных от модального окна главному
Отправлено: Bepec от Июль 14, 2016, 16:05
Но мы до сих пор не услышали почему это западло... Я вот не понимаю, объясните? :)


Название: Re: Передача данных от модального окна главному
Отправлено: kambala от Июль 14, 2016, 17:55
при использовании модального окна по-моему проще просто собрать данные из диалога после exec()


Название: Re: Передача данных от модального окна главному
Отправлено: Igors от Июль 15, 2016, 10:35
Но мы до сих пор не услышали почему это западло... Я вот не понимаю, объясните? :)
Вам нет  :)

при использовании модального окна по-моему проще просто собрать данные из диалога после exec()
Да. Или подать в диалог указатель/ссылку на структуру которую он должен заполнить. Хотя это и создает кое-какие зависимости.