为什么MainWindow没有在SLOT中关闭

时间:2014-02-20 08:03:49

标签: qt slot

我从几天开始学习Qt。我正在开发一个简单的项目,用于在Qt中仅测试2个问题。在MainWindow中,会出现一个包含四个RadioButton四个选项的问题。当用户点击右侧选项时,下一个问题应显示为新的Dialog&必须关闭普遍的问题。所以,我写了SLOT作为 -

void MainWindow::on_radiobutton2_clicked()
{
    Dialog q;
    q.exec();
    MainWindow::close();
}

但是这段代码虽然打开了Dialog,却没有关闭MainWindow。

当我改变下面的指令序列时,它起作用了 -

void MainWindow::on_radiobutton2_clicked()
{
    Dialog q;
    MainWindow::close();
    q.exec();
}

那么,为什么MainWindow在第一种情况下没有关闭?

2 个答案:

答案 0 :(得分:4)

以下两行

q.exec();
MainWindow::close();

对话框显示为模式对话框,并阻止事件循环直到它关闭。因此,除非关闭对话框,否则主窗口的close()函数将不会执行。

答案 1 :(得分:0)

关闭主窗口可能会导致糟糕的用户体验。您可能想要的是显示模态对话框。

由于QDialog::exec()阻塞直到对话框关闭,因此不应使用它。只需show()对话框。

void MainWindow::on_radiobutton2_clicked()
{
    Dialog * q = new Dialog;
    q->setAttribute(Qt::WA_DeleteOnClose); // thus it won't leak
    q->setModal(true); // so that the main window doesn't have to be closed
    q->show();
}