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::ChallangeDialogs 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.
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top