Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么主窗口未在此处的插槽中关闭_Qt_Slot - Fatal编程技术网

Qt 为什么主窗口未在此处的插槽中关闭

Qt 为什么主窗口未在此处的插槽中关闭,qt,slot,Qt,Slot,这几天我在学习Qt。我正在开发一个简单的项目,用于测试Qt中的两个问题。在主窗口中,将显示一个带有四个选项(四个单选按钮)的问题。当用户单击“右”选项时,下一个问题应显示为“新建”对话框,并且必须关闭上一个问题。所以,我把这个槽写为- 但此代码不会关闭主窗口,尽管它会打开对话框 当我像下面这样改变指令顺序时,它起了作用- void MainWindow::on_radiobutton2_clicked() { Dialog q; MainWindow::close();

这几天我在学习Qt。我正在开发一个简单的项目,用于测试Qt中的两个问题。在主窗口中,将显示一个带有四个选项(四个单选按钮)的问题。当用户单击“右”选项时,下一个问题应显示为“新建”对话框,并且必须关闭上一个问题。所以,我把这个槽写为-

但此代码不会关闭主窗口,尽管它会打开对话框

当我像下面这样改变指令顺序时,它起了作用-

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请告诉我如何更新同一窗口的内容?有很多方法。例如,您可以放置一个,然后切换可见的。谢谢。学到了一些新东西