QT
Qt 특징
ㆍ다양한 플랫폼(Platform)을 지원한다.
- Qt는 개발한 애플리케이션을 다른 플랫폼으로 포팅(Porting)하는 것이 자유롭다.
유닉스 | 리눅스(Linux), 솔라리스(Sun Solaris), HP-UX, Digital Unix, IBM AIX, SGI IRIX 등 |
MS Windows | 95, 98, NT, 4.0, ME, 2000, XP, Vista(Qt 2.0부터 지원) |
Mac OS X | Cheetach(1.0), Puma(10.1), Jaguar(10.2), Panther(10.3), Tiger(10.4), Leopard(10.5) (Qt 3.0 부터 지원) |
임베드디 리눅스 | 프레임 버퍼를 지원하는 대부분의 임베디드 리눅스 플랫폼 |
ㆍ시그널/슬롯 방식
시그널(Signal) | 사용자가 객체(위젯)에 대해 어떤 행위(예: 마우스 클릭)를 했을 때 발생한다. 일반적으로 시그널을 슬롯과 연결하여 발생한 시그널을 슬롯에게 전달한다. |
슬롯(Slot) | 사용자의 행위에 의해 발생한 시그널을 전달받으면 슬롯에 정의되어 있는 동작을 수행한다. |
Qt 5.0.2 설치
ㆍQt 다운로드 (www.qt.io)
ㆍQt 는 minGW 라는 컴파일러를 사용하고 있다.
ㆍQt Creator 5.0.2 설치 후 간단한 GUI 프로젝트를 생성하여 컴파일 후 APP 실행파일(.exe) 를 찾아 실행해 보았으나 .dll 파일의 부재로 실행이 되지 않았다.(.dll 파일 오류 발생)
(소스 파일 경로 = C:\Qt\Qt5.0.2\Tools\QtCreator\bin\untitled)
(빌드된 실행파일 경로 = C:\Qt\Qt5.0.2\Tools\QtCreator\bin\build-untitled-Desktop_Qt_5_0_2_MinGW_32bit-
Debug\debug)
ㆍQt로 만든 실행파일은 .dll 파일에 의존성을 두고 있다는 것을 확인 하였다.
ㆍ오류가발생한 .dll 파일의 경로 (C:\Qt\Qt5.0.2\5.0.2\mingw47_32\bin)
ㆍ.dll 파일 경로를 아래와 같이 환경변수에 등록 후 반드시 리부팅하여 exe파일을 실행 시킨다.
Qt IDE
ㆍQt 이클립스 이클립스를 받은후 qt 이클립스를 받으면 사용가능
ㆍKDevelop Qt를 가장 잘지원하고 qtopia도 프로젝트로 개발가능
ㆍQDevelop
ㆍQt Creator
Qt개발환경 구축
ㆍwindows 7 에서 실행되는 GUI 프로젝트를 진행함으로 IDE는 Visual Studio 2013 (이왕이면 최신버전) 에서 Qt 5.4.0 라이브러리를 이용한 빌드환경을 구축하여 start up 한다.
ㆍ우선 Visual Studio 2013 을 설치하고 아래의 주소에서 Visual Studio Add-in 1.2.4 for Qt5 (156 MB) 를 다운받는다.
(다운로드 https://www.qt.io/download-open-source/)
ㆍ설치가 끝나고 나면 Visual Studio 메뉴 중 Qt5란 탭이 생성된다.
ㆍQt Options 를 눌러서 bin 폴더가 있는 Qt 경로를 잡아준다.
ㆍ경로 C:\Qt\Qt5.4.0\5.4\msvc2013_opengl
Qt프로젝트 시작
ㆍ프로젝트 시작시 생성되는 파일 main.cpp, gr(프로젝트명).cpp, gr.h
[ main.cpp ]
ㆍQApplication a(argc, argv);
- Qt 애플리케이션에서 필요한 QApplication 클래스(Class)의 정의가 들어있는 QApplication 헤더 파일을 인클루드 시킨다.
- 일반적으로 main() 함수에서 QApplication 클래스를 사용하는데, 이 클래스는 시스템에서 사용하는 기본 폰트나 커서와 같은 GUI 자원, 프레임워크(Framework), 유틸리티 자원들을 관리한다.
ㆍgr w;
- QMainWindow 클래스를 상속받은 w 객체
ㆍw.show();
- 위젯을 화면에 표시하기 전에 크기나 위치 등과 같은 속성을 지정하면 위젯이 화면에 보여진 후에 몇번씩 다시 그려지는 것을 막을 수 있다.
- 메인 윈도우 출력
ㆍreturn a.exec();
- exec( ) 메소드를 호출하면 발생된 이벤트들을 위젯으로 넘겨주고 Qt 애플리케이션이 바로 종료 되지 않게 내부적으로 루프(Loop)를 돌면서 필요한 루틴을 실행한다.
- 어플리케이션 실행
[ gr.h ]
[ gr.cpp ]
Hello Qt
< 실행 결과 >
시그널과 슬롯을 연결하기
ㆍ슬롯 함수는 슬롯으로 사용하기 위해 정의한 멤버 함수로 클래스 내에서 선언하는 방법이 일반 멤버 함수와는 다르다.
일반 멤버 함수는 슬롯으로 사용할 수 없다.
시그널을 슬롯으로 정의된 멤버 함수에 연결하면 슬롯은 이 시그널이 발생하면 슬롯이 호출된다.
일반 멤버 함수는 슬롯처럼 사용할 수 없지만 슬롯은 일반 멤버 함수처럼 사용할 수도 있다.
ㆍ시그널과 슬롯은 이벤트 처리(Event Handling)를 위해서도 사용한다.
시그널은 정의되지 않고 선언만 하면 된다. 사용자가 선언된 시그널을 임의로 발생시키려면 emit을 사용하면 된다.
QPushButton
< Public Functions >
ㆍvoid setFlat(bool)
- 버튼의 모양이 평평한지를 결정한다. (void isFlat( ))
ㆍvoid setIcon(const QIcon &icon)
- 버튼 위에 표시할 아이콘을 설정한다.
ㆍvoid setText(const QString &text)
- 버튼 위에 표시할 문자를 설정한다.(QString text( ))
< Signals >
ㆍvoid pressed( )
- 마우스의 버튼을 누르고 있을 때 발생한다. (QAbstractButton 클래스로부터 상속 받는다.)
ㆍvoid released( )
- 마우스의 버튼을 눌렀다 뗄 때 발생한다. (QAbstractButton 클래스로부터 상속 받는다.)
ㆍvoid clicked( )
- 마우스의 버튼을 클릭할 때 발생한다. (QAbstractButton 클래스로부터 상속 받는다.)
ㆍvoid toggled(bool checked)
- 마우스의 버튼을 누르면 버튼이 들어가고 재차 마우스의 버튼을 누르면 버튼이 나오는 토글(Toggle)의 경우에 발생한다. (QAbstractButton 클래스로부터 상속 받는다.)
QApplication
< Static Public Members >
ㆍint exec( )
- 애플리케이션이 종료되거나 메인 위젯이 닫힐 때 까지 루프를 돌면서 이벤트를 처리한다.
< Signals >
ㆍvoid lastWindowClosed( )
- 마지막 윈도우가 닫힐 때 발생한다.
< public Slots >
ㆍvoid quit( )
- 애플리케이션을 종료시킨다. (void exit( ))
ㆍvoid closeAllWindows( )
- 애플리케이션의 윈도우를 모두 닫는다.
ㆍ시그널과 슬롯을 연결할 때는 connect( ) 함수를 사용하게 된다.
- connect( ) 함수는 QObject 클래스의 정적(Static) 함수로서 QObject 클래스나 이로부터 상속된 객체의 특정 함수를 호출할 때 다른 객체의 함수를 자동으로 호출하도록 연결해 준다.
connect( ) 함수
ㆍQObject::connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender | 시그널을 발생시킬 객체의 포인터를 지정한다. |
signal | 첫 번째 매개 변수로 지정된 객체(sender)가 발생시키는 시그널을 지정한다. 반드시 첫 번째 객체의 시그널을 지정해야 한다. |
receiver | 첫 번째 매개 변수로 지정된 객체에 의해 발생된 시그널을 받을 객채의 포인터를 지정한다. |
slot | 세 번째 매개 변수에 지정된 객체(receiver)에 정의되어 있는 슬롯을 지정한다. 두 번째 변수에 설정된 객체는 반드시 있어야 한다. |
Ex) QObject::connect(quit, SIGNAL(clicked( )), &app, SLOT(quit( )));
ㆍconnect( ) 함수와 반대로 연결되어 있는 시그널과 슬롯을 끊을 때에는 disconnect( ) 함수를 이용한다.
[실행 결과]
- Quit 버튼을 클릭하면 종료
progen
ㆍprogen 유틸리티는 tmake 유틸리티로 Makefile 파일을 만들 때 사용하는 프로젝트(.pro) 파일을 자동으로 생성해 준다.
ㆍprogen 유틸리티의 –o 옵션 뒤에 프로젝트명을 쓰고 그 뒤에 프로젝트에 들어사는 파일을 입력하면 된다.
qmake 유틸리티
ㆍqmake [-mode] [-option] [file_name]
-project | 실행 모드 중 하나로 프로젝트 파일을 만들 때 사용한다. 뒤에 프로젝트명을 명시하지 않으면 현재 디렉토리명을 이름으로 하는 프로젝트 파일을 만들고, 파일을 지정하지 않으면 현재 디렉토리와 서브 디렉토리에 있는 관련된 모든 파일을 이용하여 프로젝트 파일을 만든다. |
-makefile | 실행 모드 중 하나로 Makefile 파일을 만들 때 사용한다. |
- o | 옵션 중 하나로 출력할 파일을 지정할 때 사용한다. |
QT Creator Kit Selection 설정 (0) | 2016.09.26 |
---|---|
QT TCP/IP Client 프로그램 (2) | 2016.09.26 |
QT to Adobe Flash (0) | 2016.09.26 |
QT 함수 포인터 (0) | 2016.09.26 |
[QT/C++] Static 멤버 함수 사용법 (0) | 2016.09.22 |