2013-08-15 4 views
0

QMainWindow (mainWindow라고 함)은 파일 경로 등 여러 가지 thig를 입력 할 수있는 곳입니다. 그런 다음 사용자는 버튼을 클릭하여 다른 창 (secondWindow)을 열 수 있습니다. do 거기에 뭔가가 있고 마지막으로 첫 번째 창으로 돌아갑니다. Qt4에서 창 닫기

나는 두 번째 창을 열고 같은 첫 번째 숨길 수 :

사용자가 MainWindow를 위해 반환
secondWindow *sw = new secondWindow; 
sw->show(); 
this->hide(); //hide the mainWindow 

, 그는 위에서 언급 한 경로 이름처럼, 이전에 구성된 모든 일들이 여전히이 있어야합니다. 그래서 제 질문은 : 어떻게 secondWindow를 닫고 mainWindow로 제대로 돌아갈 수 있습니까?

편집 : StatusBars ans ToolBars이 사용됩니다. 그리고 예, 저는 두 개의 창문이 필요합니다 (실제로 저는 두 개 이상의 창이 있습니다).

답변

0

secondWindow의 closeEvent에서 신호를 내보내고이 신호를 mainWindow의 show() 슬롯에 연결할 수 있습니다.

secondWindow.h :

public: 
virtual void closeEvent (QCloseEvent * event) 
{ 
    emit secondWindowClosed(); 
    QWidget::closeEvent(event); 
} 
signals: 
void secondWindowClosed(); 

mainWindow.cpp :

secondWindow *sw = new secondWindow; 
connect(sw, SIGNAL(secondWindowClosed()), this, SLOT(show())); 
sw->show(); 
this->hide(); //hide the mainWindow 
+0

감사합니다, 이것이 내가 찾고 있었던 것입니다. – user2025406

0

하는 QStatusBar 또는 QToolbar처럼, QMainWindow의 기능을 사용하지 않을 경우는 저를위한 최선의 선택 QDialog를 사용하고 QDialog::exec()을 부를 것이다.

모달로 표시되므로 사용자는 mainWindow과 다시 상호 작용하기 전에 대화 상자를 닫아야합니다.

다른 방법은 secondWindow을 닫을 때 신호를 내보내고 필요한 경우 모든 리소스를 해제하는 것입니다. like :

void secondWindowClosing(void)//SLOT in mainWindow called by SIGNAL closing() or whatever from secondWindow 
{ 
    secondWindow* wnd = qobject_cast<secondWindow*>(QObject::sender()); 
    if (!wnd) // if the SLOT was called not using signals/slots (may not be needed) 
     return; 
    // get your information of the secondWindow 
    wnd->deleteLater(); // deletes wnd, after the application returns to the event loop 
    this->show(); // display the mainWindow again 
} 
0

정말 두 창이 필요합니까? 나는 QStackedWidget을 사용할 것이다. 하나의 QMainWindow는 중앙 위젯으로 QStackedWidget을 가져옵니다. QStackedWidget에서 첫 번째 및 두 번째 창에 대한 컨트롤.