그래픽 & 멀티미디어
다중 윈도우 프로그램이라니까 거창하게 보이네요. 윈도우 프로그램은 하나 이상의 윈도우로 구성됩니다. 여러 윈도우를 QT 디자이너에서 어떻게 구현하는지 보여 드릴려고 합니다. 원래 이전 시간에 올린 "QT - 프로젝트 파일 생성"에 함께 올리려 했습니다만 구분이 필요한 것 같아서 이렇게 따로 불린하게 되었습니다.
이번에 말씀 드릴 다중 윈도우 프로그램 이야기는 frmMain 외에 frmSub라는 폼을 만드고 frmMain에서 frmSub폼을 생성하고 화면에 출력하는 방법에 대해 말씀 드릴려고 합니다.
프로젝트 파일 생성 및 frmMain 생성
이전 강좌에서 올린 예제를 그대로 이용하고 내용을 추가하겠습니다.
frmMain 폼은 만들었으므로 frmMain이 호출하여 출력할 frmSub폼을 작성하겠습니다. file메뉴에서 New메뉴를 선택한 후, Dialog를 선택합니다.
- 속성의 Name에서 frmSub라고 입력합니다.
- 라벨을 추가한 후 적당한 문자열을 입력합니다.
- 버튼을 추가한 후, clicked 시그널에 대해 폼의 close 슬롯과 연결합니다.
디자인이 모두 끝났습니다. fumSub.ui로 저장하겠습니다.
이제 frmSub.ui로부터 frmSub.cpp와 frmSub.h 파일이 생성될 것입니다. 이점을 기억하여 주십시오.
frmMain에 frmSub를 출력할 버튼 추가
frmMain에 frmSub를 출력할 버튼을 추가합니다.
이 버튼을 클릭하면 frmSub를 생성하고 화면에 출력해 주어야 합니다. 이를 위해 슬롯 함수를 생성합니다.
Object Explorer의 Members 탭을 클릭한 후, slots 트리에서 적당한 권한자에 오른쪽 마우스 버튼을 클릭합니다. 오른쪽 마우스 메뉴에 New 메뉴가 나오면 클릭하고, "Edit Functions"윈도우에서 함수 이름을 "ShowSubForm()"이라고 입력합니다.
다시 Object Explorer에서 새로 생성된 "ShowSubForm()" 문자열을 클릭하면 에디터가 출력됩니다.
이 에디터에 아래의 내용을 추가합니다.
#include <frmSub.h> void frmMain::ShowSubForm() { frmSub frm( this); frm.exec(); frm.free(); }
frmSub 클래스는 frmSum.ui에서 생성될 frmSub.h에 정의 되어 있습니다. 그러므로 #include <frmSub.h>를 추가했습니다. 이제 버튼의 clicked 시그널과 ShowSubForm() 슬롯을 연결하십시오.
main.cpp
이제 폼 디자인은 완료되었습니다. 남은 일은 C언어의 실행 시작 위치인 main()함수를 만들어 주어야 합니다. 이것 또한 QT 디자이너에 준비되어 있으므로 이용해 보도록 하겠습니다.
File메뉴>>New메뉴를 선택한 후 C++ Main File을 선택합니다.
그러면 프로그램이 시작할 때 제일 먼저 출력되는 메인 폼을 선택하는 대화창이 출력됩니다. 당연히 frmMain을 선택합니다.
frmMain을 선택하면 main.cpp가 완성되어 화면에 출력됩니다. 그대로 저장합니다.
프로젝트 빌드
모든 파일을 저장하고 파일이 저장된 곳에서 qmake와 make를 차례로 실행합니다. 또는 qmake를 실행하기 전에 프로젝트 파일 .pro의 내용에 TARGET = [실행파일 이름] 추가한 후 빌드해서 원하는 이름의 실행파일을 만드셔도 됩니다.
실행하면 frmMain이 출력되며, show sub form버튼을 클릭하면 서브 폼이 출력됩니다.
서브폼이 출력된 모습니다.
임베디드용으로 빌드
우리의 목적은 i386 PC에서 실행되는 X11용 프로그램이 아닙니다. 최종적으로 구하려는 것은 Arm Embedded 용 프로그램입니다.
PC에서 테스트를 마친 프로그램을 Arm Embedded용 프로그램으로 만들어 보겠습니다. 작업은 매우 간단합니다.
]# qmake -spec $QPEDIR/mkspecs/qws/linux-arm-g++ hello.pro ]# make
에러없이 컴파일이 완료되면 작업 끝입니다.
모든 설정창이 Dialog이라고 하고..... 4 개의 Dialog가 있는 상태에서
1->2
2->3, 4
3->4
4->1, 2
이런식으로 이동이 가능한 다이얼로그를 만들려고 하는데요...
우선 하나씩 하나씩 만들어 가다가... 2번에서 3, 4번이 열리게 한 다음에......
3번에서 4번을 열게 하려고 헀을 때에 4번 다이얼로그의 클래스를 불러 올 수 없다고 하는데 이 경우의 처리법을 알고 싶습니다.