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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача данных от модального окна главному  (Прочитано 6771 раз)
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);
}

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

Сообщений: 371


Просмотр профиля
« Ответ #1 : Июль 14, 2016, 12:38 »

Как вариант, вы можете написать свой сигнал, который будет данные формы передавать. Тогда можно так:

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

Но мне больше нравится через запрос. По принципу QInputDialog::getText
« Последнее редактирование: Июль 14, 2016, 12:40 от PimenS » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Июль 14, 2016, 13:02 »

В чем беда?
Беда в том, что при вызове слота в него передаются аргументы сигнала. А разве accepted() имеет агрументы?
Записан

Qt 5.11/4.8.7 (X11/Win)
Raumnur
Гость
« Ответ #3 : Июль 14, 2016, 13:05 »

Как вариант, вы можете написать свой сигнал, который будет данные формы передавать. Тогда можно так:

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

Сигнал сделал, но результат тот же...
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #4 : Июль 14, 2016, 13:06 »

Как вариант, вы можете написать свой сигнал, который будет данные формы передавать. Тогда можно так:

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

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

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

ЗЫ. Вам лучше почитать раздел Signals & Slots, там все очень понятно разъяснено.
« Последнее редактирование: Июль 14, 2016, 13:11 от PimenS » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июль 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);
}
 

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Июль 14, 2016, 14:05 »

lazy sharing же...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Июль 14, 2016, 14:13 »

lazy sharing же...
Наверное всё-таки implicit sharing  Подмигивающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Raumnur
Гость
« Ответ #8 : Июль 14, 2016, 14:15 »

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

Вот этого замечания не понял, все настолько плохо? Улыбающийся

А так в целом разобрался, все передает...теперь =D Спасибо)))
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Июль 14, 2016, 14:18 »

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

Вот этого замечания не понял, все настолько плохо? Улыбающийся

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

Вместо QString используйте const QString& и Igors будет доволен Подмигивающий
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Июль 14, 2016, 14:33 »

lazy sharing же...
Сначала начинающий должен четко усвоить что подача структур по значению = западло. Да и возврат, строго говоря, тоже. Поэтому не надо сообщать об исключениях из правила которое еще не усвоено  Улыбающийся

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

Вот этого замечания не понял, все настолько плохо? Улыбающийся
Ну пока неважно  Улыбающийся



Записан
Bepec
Гость
« Ответ #11 : Июль 14, 2016, 16:05 »

Но мы до сих пор не услышали почему это западло... Я вот не понимаю, объясните? Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Июль 14, 2016, 17:55 »

при использовании модального окна по-моему проще просто собрать данные из диалога после exec()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Июль 15, 2016, 10:35 »

Но мы до сих пор не услышали почему это западло... Я вот не понимаю, объясните? Улыбающийся
Вам нет  Улыбающийся

при использовании модального окна по-моему проще просто собрать данные из диалога после exec()
Да. Или подать в диалог указатель/ссылку на структуру которую он должен заполнить. Хотя это и создает кое-какие зависимости.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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