2014-02-20 6 views
1

나는 몇일 후에 Qt를 배우고 있습니다. 나는 Qt에있는 단지 2 개의 질문의 퀴즈를위한 간단한 프로젝트를 개발 중입니다. MainWindow에서 네 개의 옵션이있는 질문이 네 개가 표시됩니다 (RadioButton). 사용자가 올바른 옵션을 클릭하면 다음 질문은 새로운 Dialog & 이전 질문으로 표시되어야합니다. 그래서, 같은 SLOT 썼다 -MainWindow가 여기 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는 첫 번째 경우에 폐쇄되지 않는 이유는 무엇입니까? 이 닫힐 때까지 다음 두 줄

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

대화 상자에서

+1

열기 및 닫기 대화 상자를 사용하지 마십시오. 단일 창의 내용을 업데이트하거나 QWizard를 사용하십시오. – UmNyobe

+0

@UmNyobe 같은 창에서 내용을 업데이트하는 방법을 알려주시겠습니까? – yuvi

+1

다양한 방법이 있습니다. 예를 들어 [QStackedWidget] (http://qt-project.org/doc/qt-4.8/qstackedwidget.html)을 넣고 보이는 것을 전환 할 수 있습니다. – UmNyobe

답변

4

는 모달 대화 차단 이벤트 루프로 나타납니다. 따라서 메인 윈도우의 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(); 
}