【问题标题】:QDialog::accept quits Main ApplicationQDialog::accept 退出主应用程序
【发布时间】:2011-06-11 15:42:42
【问题描述】:

我有一个ClientSocket 类,这是一个处于某种对话状态的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 slot中,我通过套接字发送消息challange(文本)并存储密码。


我希望对话框隐藏在那里并且正常的套接字对话继续。并且在对话框被接受或拒绝后,主应用程序退出(它退出它不会崩溃)。为什么 ?
  • 我的应用程序没有其他小部件。我就像 QCoreApplication 一样工作。但我仍然使用 QApplication,因为我有一些 GUI 需求。

【问题讨论】:

  • 我在你的代码中没有看到任何可疑的东西(除了没有检查 .exec() 的结果,并且有两个插槽和一个自定义信号,而你本可以在你的 @987654333 中有一个吸气剂@给定用法-通常称为挑战)。你确定它没有崩溃?如果您正在做任何持续 ClientSocket.challanged 的事情,则可能会出现问题。 (即,如果您在调试器或 valgrind 中运行它,它是否仍然运行而不会崩溃?)
  • 它不会崩溃它的exited with code 0 我认为当用户按下确定或取消按钮时它会退出QApplication 的事件循环。但是为什么呢?
  • 在您发布的代码中没有调用quit,问题可能出在其他地方。在调试器中运行你的代码,直到你看到它退出的地方。
  • 调试器说应用程序正常退出。我想提一提我的应用程序中没有其他小部件或 MainWindow。在 main() 我构造了一个 ClientSocket 用它连接到一个主机。在对话之间,ClientSocket 有时会打开一个对话框。
  • 那么你的代码结构有问题,与你发布的代码无关,如果它在你不期望的时候离开事件循环。使用调试器跟踪您的代码进入该受挑战的插槽,并查看它的去向。

标签: qt dialog qdialog


【解决方案1】:

这是此时显示的唯一窗口吗?如果是这样,我猜你的QApplication 实例设置为quit when the last window is closed。默认为真。

如果是这种情况,您应该在显示任何窗口之前将其显式设置为 false。

【讨论】:

  • 谢谢,这就是我正在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多