Qt 为什么主窗口未在此处的插槽中关闭
这几天我在学习Qt。我正在开发一个简单的项目,用于测试Qt中的两个问题。在主窗口中,将显示一个带有四个选项(四个单选按钮)的问题。当用户单击“右”选项时,下一个问题应显示为“新建”对话框,并且必须关闭上一个问题。所以,我把这个槽写为- 但此代码不会关闭主窗口,尽管它会打开对话框 当我像下面这样改变指令顺序时,它起了作用-Qt 为什么主窗口未在此处的插槽中关闭,qt,slot,Qt,Slot,这几天我在学习Qt。我正在开发一个简单的项目,用于测试Qt中的两个问题。在主窗口中,将显示一个带有四个选项(四个单选按钮)的问题。当用户单击“右”选项时,下一个问题应显示为“新建”对话框,并且必须关闭上一个问题。所以,我把这个槽写为- 但此代码不会关闭主窗口,尽管它会打开对话框 当我像下面这样改变指令顺序时,它起了作用- void MainWindow::on_radiobutton2_clicked() { Dialog q; MainWindow::close();
void MainWindow::on_radiobutton2_clicked()
{
Dialog q;
MainWindow::close();
q.exec();
}
那么,为什么主窗口在第一种情况下不关闭呢?在下面两行中
q.exec();
MainWindow::close();
该对话框显示为模式对话框,并阻止事件循环,直到其关闭。因此,除非您关闭对话框,否则主窗口的关闭功能将不会执行。在下面两行中
q.exec();
MainWindow::close();
该对话框显示为模式对话框,并阻止事件循环,直到其关闭。因此,除非关闭对话框,否则主窗口的关闭功能将不会执行。关闭主窗口可能会导致糟糕的用户体验。您可能希望显示一个模态对话框 由于QDialog::exec会一直阻塞到对话框关闭,因此不应该使用它。只需显示对话框即可
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();
}
关闭主窗口可能会导致糟糕的用户体验。您可能希望显示一个模态对话框 由于QDialog::exec会一直阻塞到对话框关闭,因此不应该使用它。只需显示对话框即可
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();
}
不要打开和关闭对话框。要么更新一个窗口的内容,要么使用QWizard。@UmNyobe请告诉我如何更新同一窗口的内容?有很多方法。例如,您可以放置一个,然后切换可见的。谢谢。学到了一些新东西:不要打开和关闭对话框。要么更新一个窗口的内容,要么使用QWizard。@UmNyobe请告诉我如何更新同一窗口的内容?有很多方法。例如,您可以放置一个,然后切换可见的。谢谢。学到了一些新东西