2014-02-20 34 views
1

我从几天就开始学习Qt。我正在开发一个简单的项目来测试Qt中的2个问题。在MainWindow中,出现了四个选项为四个选项RadioButton的问题。当用户点击正确的选项时,下一个问题应该显示为新的Dialog &上一个问题必须关闭。所以,我写了SLOT为 -为什么MainWindow没有在这里的SLOT中关闭

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

但是这个代码不关闭主窗口,虽然它打开Dialog

当我改变了像下面的指令序列,它的工作 -

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

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

+1

不打开和关闭对话框。要么更新单个窗口的内容,要么使用QWizard。 – UmNyobe

+0

@UmNyobe请问如何更新同一个窗口的内容? – yuvi

+1

有很多方法。例如,你可以放一个[QStackedWidget](http://qt-project.org/doc/qt-4.8/qstackedwidget.html)并切换可见的。 – UmNyobe

回答

4

在下面的两行

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

对话,直到它被关闭显示为一个模态对话框和块事件循环。因此,除非关闭对话框,否则主窗口的close()函数将不会执行。

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(); 
} 
相关问题