QDialog :: accettare si chiude Applicazione principale
Domanda
Ho un ClientSocket
Classe che è un TcpSocket
in un certo stato di conversazione ho bisogno di chiedere all'utente di immettere una password di comunicazione. Così ho creato un DG::ChallangeDialog
dialogo. in DG::ChallangeDialog
s ctor ho
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
emette nuovamente un segnale challanged(QString)
void ChallangeDialog::acceptedSlot(){
QString text = ui->passBox->text();
emit challanged(text);
}
in ClientSocket
faccio
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;
In ClientSocket::challange
Slot mando un messaggio challange (testo) sulla presa e memorizzare la password.
e mi aspetto che la finestra di dialogo per nascondere lì e la conversazione normale presa per continuare. e dopo la finestra di dialogo viene accettato o respinto le principali si chiude dell'applicazione (Si chiude esso non va in crash). Perché?
- Il mio applicazione non ha altri widget. Ho appena funziona come un QCoreApplication. Ma ancora ho usato QApplication causa ho alcune esigenze GUI.
Soluzione
E 'questo l'unica finestra che viene mostrato in questo momento? Se è così, direi che l'istanza QApplication è impostata su smettere quando l'ultima finestra è chiusa . E 'vero per impostazione predefinita.
Se questo è il caso, è necessario impostare in modo esplicito questo su false prima di mostrare tutte le finestre.