2014-12-10 4 views
0

코드에 close 이벤트를 설정하려고했지만이 코드를 설정하면 프로그램이 중단됩니다.Qt의 이벤트가 닫히면 프로그램이 닫힙니다.

mainwindow.cpp

void MainWindow::closeEvent(QCloseEvent *event) 
    { 
     event->ignore(); 

     if (QMessageBox::Yes == QMessageBox::question(this, "Close Confirmation?", 
                 "Are you sure you want to exit?", 
                 QMessageBox::Yes|QMessageBox::No)) 
     { 
      if(QMessageBox::Yes) 
      { 
       if(aboutDialog) 
       { 
        aboutDialog->close(); 
        event->accept(); 
       } 
       event->accept(); 
      } 
     } 
    } 

void MainWindow::showAboutDialog() 
{ 
    aboutDialog = new QDialog; 
    Ui::About aboutUi; 
    aboutUi.setupUi(aboutDialog); 
    connect(aboutUi.Close, SIGNAL(pressed()), aboutDialog, SLOT(close())); 
    aboutDialog->show(); 
} 

mainwindow.h

private: 
QDialog *aboutDialog; 

이런 내가 왜 혼란 스러워요. 이 문제를 해결하기 위해 나를 도와주세요!

+0

코드가 혼란 스럽다는 것 외에도,이'aboutDialog-> close();'호출을 제거하면 어떻게됩니까? 그것도 충돌합니까? – vahancho

+0

aboutDialog는 프로그램에있는 대화 상자입니다. 이 프로그램을 제거하면 크래시가 발생하지 않지만 대화 상자가 열려있는 전체 프로그램을 닫으면 종료됩니다. 하지만 프로그램 닫는 중 대화 상자가 열리면 닫아야합니다. – user4345796

+1

@ user4345796 주 창을 닫을 때 닫히도록 인스턴스화 할 때 주 창 포인터를'aboutDialog'의 부모로 전달할 수 있습니다 :'QDialog * aboutDialog = 새로운 QDialog (this); ' – Nejat

답변

0

을 닫으 계획이라면 이벤트를 무시하지 마십시오,이 시도 :

void MainWindow::closeEvent(QCloseEvent *event) 
{ 
    if (QMessageBox::Yes != QMessageBox::question(this, "Close Confirmation?", 
     "Are you sure you want to exit?", QMessageBox::Yes | QMessageBox::No)) 
    { 
     event->ignore(); 
    } 
} 

을 그리고 aboutDialog -box를 만들 때 Nejat의 발언에서 알 수 있듯이, 당신은 부모로 mainWindow을 통과해야합니다 aboutDialog = new QDialog(mainWindow);가. 그러면 기본 창이 닫히면 aboutDialog이 닫힙니다.

+0

이벤트를 닫으시겠습니까? 이것이 closeEvent()에 대한 재귀 호출을 유발하지 않을까요? – vahancho

+0

작동하지만 문제는 대화 상자가 프로그램을 닫을 때조차도 열어두고 있으므로 거기에서만 존재할 수 있다는 것입니다. – user4345796

관련 문제