Qdialog :: Acceptはメインアプリケーションを終了します
質問
私は持っています ClientSocket
a TcpSocket
特定の会話の状態では、ユーザーに通信パスワードを入力するように依頼する必要があります。だから私はダイアログを作成しました DG::ChallangeDialog
。の DG::ChallangeDialog
s ctor私
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
スロット メッセージを送信します 挑戦 (テキスト)ソケットを介してパスワードを保存します。
そして、ダイアログがそこに隠れ、通常のソケットの会話が続くことを期待しています。また、ダイアログが受け入れられたり拒否された後、メインアプリケーションは終了します(クラッシュしないことをやめます)。なんで ?
- 私のアプリケーションには他のウィジェットがありません。私はqcoreapplicationのように動作します。しかし、それでも私はqapplicationを使用しています。
解決
これは現時点で表示されている唯一のウィンドウですか?もしそうなら、私はあなたのものだと思います qapplication インスタンスが設定されています 最後のウィンドウが閉じているときに終了します. 。デフォルトでは当てはまります。
この場合、ウィンドウを表示する前にこれをfalseに明示的に設定する必要があります。
所属していません StackOverflow