2016-10-20 3 views
0

Я новичок в Qt и понимает концепцию сигнала и слотов. Однако я не могу его реализовать.Qt передает данные между несколькими формами

Моя цель:

Form1 имеет кнопку Config. Поэтому, когда я нажимаю Config, он должен открыть другую форму Form2 (без закрытия Form1) и отправить строку strData в Form2.

В Form2 я установил некоторое значение в строке strData. Затем я нажимаю кнопку «ОК» в Form2, Form2 должен закрываться и возвращать строку в Form1.

Когда вызов возвращается к Form1, он должен продолжить, откуда он выдает сигнал для вызова Form2.

Любая помощь очень ценится.

ответ

0

Вы не можете сделать это с помощью сигналов/слотов; сигнал испускается, и все подключенные слоты выполняются, а затем код продолжается от источника сигнала и в конечном итоге возвращается в цикл событий. Вот когда на самом деле отображается ваша вторая форма, и пользователь может отреагировать на нее, но к тому времени ваш код давно прошел, когда сигнал был испущен.

Я считаю, что вы ищете метод QDialog :: exec; используйте его вместо сигнала. Основной образец кода является:

// This is the response to click on Config... 
Form2Dialog form2; 
form2.setSomeStringValue (some_value); 

if (form2.exec() == QDialog::Accepted) 
{ 
    QString some_new_value = form2.newValue(); 
} 

Form2Dialog является подклассом QDialog где вы добавили свой собственный setSomeStringValue и NEWVALUE методы. (То, что вы на самом деле называете этим, зависит от вас.)

Важно то, что метод exec блокируется и не возвращается до тех пор, пока пользователь не выберет OK или Cancel в диалоговом окне или не закрывает его с помощью кнопки «закрыть» в строке заголовка (если есть).

Смежные вопросы