2011-06-11 27 views
1

我有ClientSocket類是一個TcpSocket在一定的對話狀態我需要請求用戶輸入通信密碼。所以我創建了一個Dialog DG::ChallangeDialog。在DG::ChallangeDialog小號的ctor我已經QDialog :: accept quits主要應用程序

ui->setupUi(this); 
QPushButton* okButton = ui->buttonBox->button(QDialogButtonBox::Ok); 
if(okButton != 0x0){ 
    okButton->setText("Challange"); 
} 
QObject::connect(this, SIGNAL(accepted()), this, SLOT(acceptedSlot())); 

acceptedSlot再次發出信號challanged(QString)

void ChallangeDialog::acceptedSlot(){ 
    QString text = ui->passBox->text(); 
    emit challanged(text); 
} 

ClientSocket我做

case Hallo:{ 
      if(m->message().startsWith("welcome")){ 
       DG::ChallangeDialog* dlg = new DG::ChallangeDialog; 
       dlg->setModal(true); 
       connect(dlg, SIGNAL(challanged(QString)), this, SLOT(challanged(QString))); 
       dlg->exec(); 
       /* 
       DG::MessagePacket* res = new DG::MessagePacket((int)Hallo); 
       res->setMessage("challange"); 
       send(res); 
       state = Challange; 
       */ 
      } 
     }break; 

ClientSocket::challange插槽我發送消息challange (文本)通過套接字並存儲密碼。


我希望Dialog隱藏在那裏和正常的套接字對話繼續。並在對話框被接受或拒絕後,主應用程序退出(它退出不會崩潰)。爲什麼?

  • 我的應用程序沒有其他小工具。我只是像QCoreApplication一樣工作。但是我仍然使用QApplication,因爲我有一些GUI需求。
+0

我的代碼中沒有看到任何可疑的東西(除了沒有檢查'.exec()'的結果,並且有兩個插槽和一個自定義信號時,如果在給定的ChallangeDialog中只有一個getter這種用法 - 通常被稱爲挑戰)。你確定它沒有崩潰嗎?如果你做了任何持久的'ClientSocket.challanged',可能會有問題。 (即,如果你在調試器中運行它,或者valgrind運行它,它仍然會運行嗎?) – Mat 2011-06-11 15:55:03

+0

它不會崩潰它的'用代碼0退出'我認爲當用戶按下確定或取消按鈕時它會退出'QApplication事件循環。但爲什麼 ? – 2011-06-11 16:03:25

+0

在您發佈的代碼中沒有調用'quit'的情況,問題可能在其他地方。在調試器中運行你的代碼,直到你看到它的保存位置。 – Mat 2011-06-11 16:07:22

回答

1

這是目前顯示的唯一窗口嗎?如果是這樣,我猜你的QApplication實例設置爲quit when the last window is closed。這是默認情況下。

如果是這種情況,您應該在顯示任何窗口之前將其明確設置爲false。

+0

謝謝多數民衆贊成我正在尋找。 – 2011-06-13 07:40:10