我从几天开始学习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
在第一种情况下没有关闭?
答案 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();
}