QDIALOG :: Akzeptieren Sie die Hauptanwendung beendet
Frage
Ich habe ein ClientSocket
Klasse, die a TcpSocket
In einem bestimmten Gesprächszustand muss ich den Benutzer bitten, ein Kommunikationskennwort einzugeben. Also habe ich einen Dialog erstellt DG::ChallangeDialog
. in DG::ChallangeDialog
s ctor ich
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
emittiert wieder ein Signal challanged(QString)
void ChallangeDialog::acceptedSlot(){
QString text = ui->passBox->text();
emit challanged(text);
}
in ClientSocket
Ich tue
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;
Im ClientSocket::challange
Slot Ich sende eine Nachricht Herausforderung (Text) über den Socket und speichern Sie das Passwort.
Und ich erwarte, dass sich der Dialog dort versteckt und das normale Socket -Gespräch fortgesetzt wird. und nachdem der Dialog akzeptiert oder abgelehnt wurde, beendet die Hauptanwendungen (es beendet es nicht ab). Wieso den ?
- Meine Anwendung hat keine anderen Widgets. Ich arbeite einfach wie eine QCoreApplication. Trotzdem habe ich Qapplication verwendet, weil ich einige GUI -Bedürfnisse habe.
Lösung
Ist dies das einzige Fenster, das zu diesem Zeitpunkt angezeigt wird? Wenn ja, würde ich vermuten, dass Ihre Qapplication Instanz ist auf Beenden Sie, wenn das letzte Fenster geschlossen ist. Es ist standardmäßig wahr.
Wenn dies der Fall ist, sollten Sie dies ausdrücklich auf false setzen, bevor Sie Windows anzeigen.