2013-07-30 116 views
1

假設我在Qt應用程序中有兩種形式。我需要在兩種形式之間多次傳輸數據,所以我使用循環來做到這一點。我只想在Form 1繼續循環之前從Form 2獲得結果。這是我的期望的意圖:如何在Qt中的表單之間傳輸數據序列

transfer data

當我使用的循環通常,循環開始在I = 1和發送數據,以形成2之前表格2返回結果給形式1,形式1是繼續用i = 2發送數據。

你能給我一些解決方案嗎?

謝謝!

+1

參考你能不能給一些代碼,比如你如何發送數據到表單2並從表單2得到結果? – thuga

+0

2個表單屬於2個線程還是同一個線程? – trandatnh

回答

0

可以使用信號槽概念來實現這一點,

如果Form1中有窗口2的對象(構圖)

你可以做

connect(this,SIGNAL(sendData(DataClass),ptr_form2,SLOT(receiveData(DataClass)); 
connect(ptr_form2,SIGNAL(acknowledge()),this,SLOT(resendData())); 

ptr_form2是窗口2的參考

DataClass就是你的數據,它可以是任何類型的。用你的類對象或任何數據類型替換它

//sendData is signal, in form1 
signals: void sendData(DataClass); 

//resendData is slot in form1 
private slots: void resendData() 
{ 
    emit sendData(objData); // objData is your data 
} 

//acknowledge is signal in form2 
signals: void acknowledge(); 

//receiveData is public slot in form2 
public slots: void receiveData(DataClass data) 
{ 
    /* 
      Do you activity here 
     */ 
    emit acknowledge(); // Emit Acknowledge 
    } 

如果你在任何第三窗體或類有兩種形式的參考,那麼你可以做
讓ptr_form1是Form1中
讓ptr_form2的引用是窗口2

connect(ptr_form1 ,SIGNAL(sendData(DataClass),ptr_form2,SLOT(receiveData(DataClass)); 
connect(ptr_form2,SIGNAL(acknowledge()),ptr_form1 ,SLOT(resendData())); 
+0

我也使用Signal&Slot在表單之間傳輸數據。你能解釋更多關於你的答案嗎? –