質問

私は持っています ClientSocket a TcpSocket 特定の会話の状態では、ユーザーに通信パスワードを入力するように依頼する必要があります。だから私はダイアログを作成しました DG::ChallangeDialog 。の DG::ChallangeDialogs 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に明示的に設定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top