2

特定の会話状態にあるClientSocketクラスがありTcpSocket、ユーザーに通信パスワードの入力を求める必要があります。だから私は Dialog を作成しましたDG::ChallangeDialogDG::ChallangeDialog私は

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 スロットでは、ソケットを介してMessage challange (テキスト) を送信し、パスワードを保存します。


ダイアログがそこに隠れて、通常のソケットの会話が続くことを期待しています。ダイアログが承認または拒否された後、メイン アプリケーションは終了します (終了してもクラッシュしません)。なんで ?

  • 私のアプリケーションにはその他のウィジェットがありません。私は QCoreApplication のように動作します。しかし、まだGUIが必要なため、QApplicationを使用しています。
4

1 に答える 1

2

現時点で表示されているウィンドウはこれだけですか? もしそうなら、最後のウィンドウが閉じられたときにQApplicationインスタンスが終了するように設定されていると思います。デフォルトでは true です。

この場合、ウィンドウを表示する前に、これを明示的に false に設定する必要があります。

于 2011-06-12T15:03:10.700 に答える