2014-08-28 4 views
0

저는 학생이며 논문을 작성하기 위해 질문 기반 게임을 만들고 싶습니다. 그래픽 인터페이스를 정교하게 만들기 위해 QT를 사용하고 싶지만 사용하지 않고 여러 창으로 응용 프로그램을 만드는 방법을 모르겠습니다. "Form"이라는 기본 클래스 (추상)와 Form : MainMenuForm, LoginForm 및 GameForm에서 상속 한 세 가지 클래스가 있습니다. 내가 찾은 예제의 일부에서 QT가 포함 된 여러 개의 창

는 윈도우의 레이아웃 방법 쇼()가 호출 생성자에서 메인에 잘 살고있다,하지만 난 주에서 같은 것을 할 싶습니다 :

// Creates a FormFactory object and ensures singleton instance 
FormFactory * factory; 

factory = factorySingleton.GetFactory(); 

//select a Form to display 

int choice = 1; 
Form * actualForm; 

while (choice != 0) 
{ 
    factory->Init(choice); 
    actualForm = factory->ReturnActualForm(); 
    choice = actualForm->Display(); 
} 

Display 메서드는 모든 derived-Form에 공통적으로 어떤 창 표시를 나타내는 int를 반환해야합니다. 예를 들어 MainMenuForm의 Display 메서드는 사용자가 Login 창으로 진행할 경우 2를 반환하고 사용자 응용 프로그램을 닫고 싶습니다.); Display 메서드는 폼을 표시해야합니다.

마지막으로, 나는 모든 예에서 그들이 주 말에

return app.exec(); 

쓰기 것으로 나타났습니다.

내 프로젝트의 경우 app.exec()를 어디에 써야하나요? while 문 앞이나 뒤에 또는 안에?

+0

기본적으로 main() 함수의 끝 부분에 모든 GUI 요소가 설정됩니다. – glezmen

+0

각 "Window"를 다른 QWidget 또는 QMainWindow로 만든 다음 인스턴스를 만들고 그 위에'show()'를 호출하면 예를 들어 버튼 클릭 또는 무언가가 나타나길 원합니다. – AngryDuck

+0

부모가없는 모든 QWidget 서브 클래스는'show()'할 때 자동으로 최상위 레벨 창이됩니다. 그리고'app.exec()'는 응용 프로그램의 실제 이벤트 루프를 시작합니다. 그 전에는 아무 것도 보이지 않습니다. (글쎄, 대화창을 만들 수는 있지만 (보통은하지 말아야합니다) 또는 스플래시 창을 보여줄 수는 있습니다.) – hyde

답변

0

디자인이 상당히 나쁩니다. 인용 한 코드는 app.exec()를 호출하기 전에 인스턴스화 된 별도의 클래스에 있어야합니다. 현재 솔루션은 양식을 한 번만 선택하면 표시되고 닫으면 프로그램이 종료됩니다.

신호 및 슬롯에 대한 Qt 문서를 읽고 Qt GUI 응용 프로그램을 작성하는 방법에는 다른 접근 방식이 필요합니다.

관련 문제