일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 베론빵
- Windows
- 스타벅스
- 초코 바나나 코코아
- 오사카
- 리버 크루즈
- 유럽
- 하이네켄 맥주 박물관
- 여행
- 국립 독일 박물관
- 뮌헨
- 아메리카노
- 루브르 박물관
- 나르비크
- Qt
- 다하우 수용소
- 플로우메터
- 아이스 아메리카노
- 간사이 공항
- 포르쉐 박물관
- 룰레아
- 도톤보리
- 암스테르담 국립 미술관
- 올륌픽 파르크
- 독일
- 매스커피
- 파리
- 하파란다
- C++
- this call
- Today
- Total
구름
Qt Framwork 소개 본문
Qt Frame work.
1990년대에 trolltech 에서 GUI 라이브러리로 시작해서 지금은 UI 뿐만 아니라 network,xml,container class 등을 지원하는 라이브러리가 되었다.
Qt 를 사용하는데 있어 가장 큰 장점은 "Write Once, Compile Anywhere" 이라는 것에서 볼 수 있듯이 한번의 코드 작성으로 각 플랫폼별로 빌드만 하면 완전히 같은 결과물을 만들어 낼 수 있다.
위 두 프로그램은 같은 코드로 각각 Ubuntu, Windows 에서 빌드 후 실행 한 모습이다.
디폴트 UI,폰트를 사용해서 외형이 다르긴 하지만 두 프로그램이 같은 결과물 인것을 알수 있다.
Qt 를 나름대로 정의하자면,
오픈소스 크로스 플랫폼 C++ Framework 라고 할 수 있을것 같다. 물론, C++ 말고도 다양한 언어와 연동 되지만 내가 주로쓰는 언어가 C++ 이다 보니 C++ Framework 로 보이는것 같다.
우리 개발자들은 코딩한 결과물을 배포하게 되는데, 이때 문제가 되는것이 소프트웨어의 라이센스 이다.
Qt 는 상용으로 사용할 수 있는 상용 라이센스 와 오픈소스 기반의 GPL 라이센스로 나뉜다.
상용 라이센스의 경우 월 300달러 정도의 가격으로 자유롭게 결과물 배포를 할 수 있다.
하지만 월 300달러에 달하는 금액을 개인이 지속적으로 내기는 어려우므로 기업이 아닌 이상 보통 개인 사용자는 오픈소스용 Qt 를 사용하게 된다.
오픈소스로 프로그램을 개발 할 경우, 2가지의 선택지가 있다.
하나는 동적 링크(dll,so 파일)를 사용해서 라이브러리를 링크하는 경우와 다른 하나는 필요한 라이브러리를 실행파일 내에 모두 넣는 방법이 있다.
전자의 경우 소스코드 공개의 의무가 없다. 따라서 개발 후 실행 파일을 배포 하는 것에 아무 제한이 없다. 후자의 경우 개발한 코드 안에 GPL 라이센스를 따르는 코드가 하나라도 포함될 경우, 해당 코드 전체가 GPL 라이센스를 따라야 한다. 즉 코드를 공개 해야하는 의무가 생긴다.
mainwindow 하나를 만들어서 아무 코드도 작성하지 않고 빌드 후 실행 하려면 위 사진과 같이 7개의 dll 파일이 필요하다 실행 파일 크기는 겨우 25KB 인데, 라이브러리 크기는 합쳐서 10MB 가 넘어간다.
그렇다고 일반 사용자의 컴퓨터에 Qt 라이브러리가 존재한다는 보장도 할 수 없다.
(Qt 개발자가 아니라면 위의 라이브러리가 있는 PC를 찾기 정말 힘들 것 이다.)
따라서 어쩔 수 없이 Qt 개발자는 필요한 라이브러리 파일을 같이 배포해야 하고, 간단한 계산기 프로그램을 만들어서 배포한다고 하여도 저 많은 dll 파일을 같이 배포해야 한다.
이런 불편을 한번에 해결할 수 있는 방법이 (프로그램의 규모가 작다면) 실행 파일 안에 필요한 라이브러리를 몽땅 static 으로 넣는것 인데, 이렇게 된다면 위에서 언급 한 것 처럼 코드 공개의 의무가 생긴다. (자세한 내용은 여기 를 참조)
실제 공유 라이브러리와 같이 배포하는 Qt 프로젝트로 Blizzard 社 의 Battle.net app 이 있는데 소스 공개가 되어있지 않다.
그 외에 vlc 나 VirtualBox 등 의 프로그램도 Qt를 이용하였지만 공유 라이브러리를 배포하므로 Qt 사용으로 인해 소스 공개를 할 의무는 없다.
인스톨 마법사를 사용한다면 라이브러리가 많더라도 배포 자체에 큰 불편은 없을것 같다.
필자의 경우 배포판을 static build 하여 실행파일 하나를 만들어 놓고 소스를 github에 올리는 식으로 Qt를 사용하고 있다.
Qt를 사용 한 프로그램 배포 시 어떤 방법을 사용할지는 개발자가 잘 생각해 보고 결정할 일인것 같다.
필자의 경우, raspberry PI 에서 GUI를 제작 해야 했던 적이 있었는데, Java 를 이용하기에는 빌드 시간이나 실행 이 너무 느려서 대안이 없을까 찾아보다가 발견 한 것이 Qt Framwork 이다. 처음 접했을 때도 상당히 쉽게 익혀서 사용한 기억이 난다. 그렇게 시작한 Qt 프로그래밍이 지금은 나의 주 사용 Framework 가 되었다. 하나의 코드로 크로스 플랫폼에서 빌드 하여 native 실행 파일을 만들어 낼 수 있다는 매력 때문에 정말 애착이 가는 라이브러리 인것 같다.