QDialog :: accept выходит из основного приложения - PullRequest
1 голос
/ 11 июня 2011

У меня есть класс ClientSocket, который является TcpSocket в определенном состоянии разговора. Мне нужно попросить пользователя ввести пароль для связи. Итак, я создал диалог DG::ChallangeDialog. в DG::ChallangeDialog s 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, потому что у меня есть некоторые потребности в графическом интерфейсе.

1 Ответ

1 голос
/ 12 июня 2011

Это единственное окно, которое отображается в это время?Если это так, я бы предположил, что ваш экземпляр QApplication установлен на выход при закрытии последнего окна .По умолчанию это правда.

Если это так, перед отображением любых окон следует явно установить значение false.

...