2016-10-20 23 views
0

私はQtを初めて使い、信号とスロットの概念を理解しています。しかし私はそれを実装することができません。Qtは複数のフォーム間でデータを渡します

私の目的は次のとおりです。

Form1にはボタン設定があります。だからConfigをクリックするとForm2を別のフォーム(Form1を閉じることなく)で開き、strDataをForm2に送ります。

Form2では、文字列strDataに値を設定しました。 Form2で[OK]ボタンをクリックすると、Form2が終了し、Form1に文字列が返されます。

呼び出しがForm1に返されるとき、Form2を呼び出すために信号を送信した場所から続ける必要があります。

ご協力いただきまして誠にありがとうございます。

答えて

0

信号/スロットを使用してこれを行うことはできません。信号が放射され、接続されたすべてのスロットが実行され、コードは放射された場所から続き、最終的にイベントループに戻ります。 2番目のフォームが実際に表示され、ユーザーがそれに応答することができますが、それまでにコードが発信された場所は長いです。

あなたが探していると思うものは、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は、あなた自身のsetSomeStringValueとnewValueにメソッドを追加しましたQDialogのサブクラスです。

重要なことは、ダイアログボックスで[OK]または[キャンセル]を選択するか、[閉じる]ボタンを使用して閉じるまで、execメソッドがブロックして戻らないことですタイトルバーに(もしあれば)。

関連する問題