Qt(프레임워크)

  • 홈페이지 : [1]

1 개요

The Qt Company에서 개발한 오픈소스 C++ 개발 프레임워크. '큐트'라고 읽는다. C++ 언어와 QML이라는 자체 스크립트 언어를 기반으로 한다.

2016년 6월 현재 최신 버전은 Qt 5.7.0과 Qt 4.8.7이다.

"write once, compile anywhere"를 표방하는 크로스 플랫폼으로, 단 한 번의 코딩으로 다양한 플랫폼으로 빌드가 가능한 환경에 중점을 두고 있다. 현존하는 주요 플랫폼 (Windows, Linux, OSX, Android, iOS 등)을 거의 대부분 지원한다. 초기에는 GUI 라이브러리로 시작하였으나, 점점 기능이 확대 되어, 통합개발환경(IDE)와 UI개발도구, 번역 작업을 위한 도구 등등에 C++ 개발에 필요한 온갖 기능(UI, XML, 네트워크, SVG, Animation, Container Class 등등)을 제공하는 거대 라이브러리가 되었다.

2 Qt 5 지원 플랫폼

2.1 Qt 공식 지원 플랫폼

Qt 5.7 기준. 다른 버전, 대응 컴파일러를 비롯한 자세한 내용은 [2]를 참조.

  • Windows 10 64/32bit, Windows 8 64/32bit, Windows 7 64/32bit
  • Linux - OpenSuSE 13.1 64bit, Red Hat Enterprise 6.5 64bit, Ubuntu 14.04 64bit 등등
  • OSX 10.11 10.10, 10.9, 10.8
  • Embedded Linux
  • QNX 6.6.0
  • Windows Embedded 7, Windows Phone 8.1(arm), Windows RT
  • iOS 6이상
  • Android API Level 16

2.2 그 이외 지원 플랫폼

이외에도 Qt Company, 다른 개발사, 오픈 커뮤니티 등에서 공식/비공식으로 지원 가능한 플랫폼이 존재한다.
참조[3]

  • Tizen
  • Sailfish
  • BlackBerry 10
  • VxWorks
  • Embedded Android

등등

3 라이센스 / 서포트 정책

라이센스 비교는 [4]를 참조할 것

Qt 5.7 현재
  • 오픈 소스 라이센스
    • LGPLv2.1
    • LGPLv3
    • GPLv2/v3
    • *일부 모듈은 LGPLv3을 지원하지 않으며 GPL/상용 라이센스만 지원한다.
  • 상용 라이센스

4 Qt가 사용된 어플리케이션 / 플랫폼

등등

5 The Qt Company

원래 트롤텍이라는 회사에서 개발했으나 노키아가 트롤텍을 인수한 이후에는 노키아에서 관리하였으며, 2012년 8월 9일 Digia에게 넘어갔다. 2014년 The Qt Company라는 이름으로 Digia 자회사로 독립하였다.

6 Qt 4 vs Qt 5

현재 공식적으로 지원하는 메이저 버전은 Qt 4, Qt 5이다. Qt 3.x버전을 사용하기 위해서는 별도 비용을 지불하고 Qt 4용 Qt 3 호환 솔루션을 구입해야 한다.

Qt 4와 Qt 5는 개발 이념에 상당한 차이가 있다.

6.1 Qt 4

  • 개요
최신 버전은 4.8.7. Qt 4에 대한 개발/유지 종료 시점에 대한 언급이 없는 것으로 봐서 당분간은 Qt 5와 병행하여 계속 업데이트가 될 예정으로 보인다.
상당한 역사를 가지고 있기 때문에 오래 전부터 데스크탑용으로 개발하였던 어플리케이션은 계속 Qt 4를 사용중이다. 참고로 마야도 Qt 4.8로 개발되었다.
  • 개발 이념
    • 어플리케이션 프레임워크
단순히 GUI 프레임워크가 아닌, DB, XML, Script, Network, Web, 멀티미디어 등 어플리케이션 개발에 필요한 모든 기능을 넣은, '어플리케이션 프레임워크'를 표방한 것을 알 수 있다. 이로 인해 다른 라이브러리의 이용을 최소한으로 줄이고 Qt만으로 상당한 부분을 개발 가능하게 되었다.
  • 데스크탑 OS 지원이 메인, 이후 모바일 플랫폼에 이식
데스크탑용 어플리케이션 개발에 최적화되어 있다. 기본적으로 C++ API를 제공하며, 공식적으로 자바스크립트 바인딩을 제공한다. 최신 버전의 Qt Creator에서도 Qt 4 개발을 지원한다. 이후 Qtopia, Windows Embedded, Symbian, Meego 등의 모바일 플랫폼에 이식되었으나, 모바일용으로 쓰이기에는 한계가 많았기에 아키텍쳐를 대대적으로 변경할 필요성이 대두된다.
  • 그래픽 백엔드
플랫폼의 네이티브 그래픽 프레임워크를 사용하나, 플랫폼의 위젯관련 API는 거의 사용하지 않는다. 예를 들어, Windows의 경우 GDI+를 기반으로 하나, MFC를 이용하지 않으며, 버튼 등의 위젯도 Win32 API를 이용하지 않고, 자체적으로 Windows의 룩앤필을 그대로 모방하였다. 자세히 보면 버튼이나 메뉴 등의 디자인이 Win32/MFC 어플리케이션과 약간씩 다른 것을 알 수 있다.
  • 전망
기존의 Qt 4 어플리케이션이 아닌 이상 더이상 신규로 Qt 4 어플리케이션을 개발할 필요는 없다. 지속적인 업데이트는 이루어지고 있으나 기능상으로는 더 이상 크게 추가되는 일은 없을 듯. Qt 4의 기능은 대부분 Qt 5에서 제공하고 있다. 또한 보다 성능/기능이 우수한 모듈이 Qt 5에 존재하며, 언젠가 Qt 4 업데이트가 종료되는 시점이 오게 되므로 기존의 Qt 4 어플리케이션도 슬슬 Qt 5로 옮기는 것을 고민해야 할 듯.
다만, PySide를 사용하고 있는 경우, 상당한 주의가 필요하다. Qt 5용 PySide의 개발이 지지부진하기 때문. 만약 데스크탑에서 강력한 기능 / 빠른 생산성을 가진 프로토타입 개발 환경이 필요하다면, Qt 5 Qt Quick Control 보다는 Qt 4 기반의 PySide를 추천.
6.1.1 Qt 4.5 이후
Qt 개발사였던 트롤텍이 노키아에 합병된 이후 노키아의 플랫폼에 Qt를 전면으로 내세움에 따라 개발 전략이 급격히 바뀌게 된다.
  • 전면적인 LGPL의 도입
  • 심비안 / 미고의 플랫폼용 API로 완전 커버
  • 모바일에 최적화된 UI 개발
  • Python Binding인 PySide
  • IDE인 QtCreator 개발 전폭 지원
하지만 3년도 되지 않아 노키아가 Qt 중심의 플랫폼 전략을 철회하고 Qt 개발팀을 Digia사에 매각한다. 이에 따라 모든 개발 로드맵은 취소 혹은 전면 수정된다. 유일한 이득은 LGPL 라이센스

6.2 Qt 5

  • 개요
최신 버전은 5.6.0. Qt 5는 등장한지 얼마 되지 않았고, 개발 이념도 Qt 4와 상당히 다른데다가, 초기 악평이 많아서 많은 어플리케이션 개발자들은 Qt 5로의 개발을 보류중이다. Qt 5.0, 5.1, 5.2까지는 Qt 컨설턴트들도 사용을 극구 말릴 정도.
  • 개발 이념
    • QML ( Qt Meta-object Language? )의 전면 부상
Qt 5 프레임워크 자체는 C++로 개발되어 있고 C++ API를 제공하나, 핵심 기능은 전부 QML + 자바스크립트 API를 통해 개발이 가능하도록 한다. Qt 5의 가장 중요한 이념이라 할 수 있다. QML은 Qt에서 제공하는 독자적 개발 언어로, 문법은 CSS와 닮았으며 자바스크립트를 섞어서 사용한다. 참고로, QML이 무엇의 약자인지는 Qt 개발자들도 모른다고 한다. 공식적으로도 Qt에서는 QML이 무슨 약자인지를 설명하고 있지 않다.
  • 그래픽용 백엔드
그래픽용 백엔드는 더이상 GDI+ CoreGraphics등의 플랫폼의 네이티브 API를 사용하지 않고 OpenGL / OpenGL ES를 사용한다. 이로 인해 플랫폼에서의 OpenGL API 제공이 필수가 되었지만, 반대로 별도의 그래픽용 API를 제공하지 않아도 간단히 Qt를 포팅할 수 있게 되었다.
  • 메이저 모바일 플랫폼 지원
안드로이드와 iOS를 전폭적으로 지원한다. (노키아가 Qt를 버리지 않았으면 불가능했을 수도...)
특히 iOS의 경우 앱 배포시 문제가 되었던 자바스크립트 엔진 V8의 runtime compile과 Native WebView 문제가 Qt 5.4, 5.5에서 해결되면서, iOS용 앱 개발에 대한 제한이 상당부분 사라지게 되었다.
  • UI를 비롯하여, 모바일 플랫폼에 최적화된 기능을 QML로 제공하는 것을 우선 -> 이후 데스크탑용 UI를 QML로 제공
QML용 UI 모듈은 Qt Quick 라이브러리를 통해 가변 화면, 플리킹, 멀티터치 등 모바일에 최적화된 UI를 제공한다. 한동안은 Qt Quick의 기능/성능이 어떻게 평가되느냐에 따라 Qt 5의 운명이 결정될 듯. Qt 5.3부터는 데스크탑용 UI인 Qt Quick Control도 제공한다.
  • QWidget
기존의 데스크탑용 C++ UI 모듈은 Qt 4에서는 기본으로 포함되어 있었으나 이제는 반드시 다른 라이브러리처럼 직접 프로젝트 파일에서 설정해 주어야 한다.
  • 전망
    • 모바일 플랫폼
Qt 5.5부터 안드로이드, iOS 지원이 상당한 완성도를 보이면서 다른 크로스 플랫폼 개발환경 (HTML5, Corona 등)과 제대로 경쟁할 수 있을 듯.
  • 데스크탑 플랫폼
C++ API에서는 이미 크로스 플랫폼의 최강자. C++용 QWidget 모듈을 이용하여 기존의 Qt4 식으로 데스크탑용 어플을 개발 하기에 큰 부족함이 없다. 데스크탑용 QML라이브러리인 Qt Quick Control은 C++ QWidget에 비해 완성도가 많이 떨어지므로 간단한 어플 / 프로토타입 개발에만 사용하는 것이 좋을 듯. 크로스 플랫폼의 최강자이기는 하나 최신의 닷넷 UI에 비해서는 확실히 구식이기 때문에 C++/크로스 플랫폼이 필수가 아닌 프로젝트라면 닷넷이 사용하기 편할 듯.
  • 임베디드 플랫폼
Qt에서 요새 밀고 있는 분야로, Qt 5에서 그래픽 부분을 떼어 놓고도 작동 가능하기 때문에 IoT 기기에 포팅하기에 최적화 되었다는 것에 중점을 두고 마케팅중.
  • Ubuntu가 Qt4/QML 때문에 한 번 욕을 단단히 먹고 나서 현재는 다른 UI를 사용중이나 향후 (버전 14 이후)에는 Qt5/QML2을 사용하는 것을 긍정적으로 검토중이다.
[5]
6.2.1 Qt 5.5

2015년 7월 1일 릴리스 되었다.

  • 3D & OpenGL
Qt Canvas 3D, Qt 3D 두 개의 모듈이 추가
  • Qt Canvas 3D는 Qt 5.4 버전에서 테크놀로지 프리뷰로 발표된 모듈. 이번 버전에서 정식판으로 편입됨.
    • WebGL과 같은 API를 QtQuick에서 사용가능
    • 저수준의 API이나 three.js같은 WebGL용 라이브러리를 사용 가능
  • Qt 3D는 5.5에서 테크놀로지 프리뷰로 발표 (아직 정식판 아님). 5.6에서 정식판 편입 예정
  • Qt Quick & Multimedia
    • QML Engine의 버그 수정, 성능 향상 이루어짐
    • Javascript의 array를 지원.
    • new 메소드로 유저 독자 타입을 작성하기 위한 인터페이스가 추가.
    • 기존의 사용 버전에서만 사용가능했던 Qt Quick Enterprise Controls가 오픈소스 버전의 Qt Quick Controls에 통합됨.
    • TreeView 추가
    • Qt Quick Controls의 라이센스가 LGPLv3으로 변경
  • Qt WebEngine & WebView
    • Qt WebEngine은 Chromium 40을 기반
    • 파일 다운로드, 캐싱, 쿠키, 설정에 관한 API가 추가
    • Qt WebChannel 기능 탑재. 보다 편리하게 WebChannel을 사용 가능.
  • Qt WebView 모듈 ( 네이티브의 WebView 래퍼)
    • 지원 플랫폼이 iOS, Android, OSX로 확대
    • API 추가
  • Qt Location
    • 맵의 패스파인딩을 제공하는 Qt Location 모듈이 테크놀로지 프리뷰 버전으로 등장
    • Qt 5.6에서 정식 버전에 포함될 듯
    • 매핑 프로바이더를 선택가능 - Nokia Here, Mapboc, Openstreet map
  • 그외
    • RedHat Enterprise Linux의 지원이 개선됨
    • OSX 10.8, 10.9, 10.10을 지원
    • Window 10는 5.5.x에서 지원할 계획
  • 개발 종료된 모듈
    • Qt Webkit, Qt Declarative(Qt Quick1), Qt Script 모듈은 종료.
Qt5.5에서도 사용은 가능하나, 대체 모듈이 이미 있으므로 개발 종료.
6.2.2 Qt 5.6

2016년 3월 16일 릴리스 되었다.

  • Qt Core, Qt Network 등
    • 성능 향상, 메모리 최적화, 편의를 위한 API 추가
  • Qt GUI
    • OpenGL ES 3.0 / 3.1 대응 개선
    • high-dpi 지원 개선
    • 16bit Rendering 지원
  • Qt Widget
    • Dock 관련 기능 대폭 개선
  • Qt 3D
    • 아직까지도 정식판 발매되지 않음 (Technology Preview)
  • Qt Quick Controls 2.0
    • 임베디드/모바일에서 동작하기 위한 경량 컨트롤 제공
    • 템플릿 시스템 기반 커스텀 스타일 기능
    • 기본 제공 스타일 (기본, 매터리얼, 유니버설)
  • LTS (Long-term support)
    • 3년간 지원을 보장
6.2.3 Qt 5.7

2016년 6월 16일 정식 릴리스 되었다. 5.6이 나온지 3개월밖에 안됐는데 벌써 나왔다.

  • C++ 11을 지원하는 컴파일러에서만 동작
    • 반대로 말하면 C++11을 지원하지 않는 환경을 더이상 지원하지 않는다.
  • 라이센스
    • LGPL v3
      • Qt 기본 프레임워크는 LGPL v3를 지원한다.
    • GPL v3, 상용 라이센스
      • Qt Creator, Qt Charts, Qt Data Visualization, Qt Virtual Keyboard등은 LGPL 대상에서 빠졌다.
    • 이전과 달리 Qt는 LGPL v2.1을 더이상 적용하지 않는다.
  • Qt 3D
    • Technical Preview라는 딱지를 떼고 정식으로 지원하는 모듈이 되었다.
  • Qt Quick Controls 2 완벽지원
    • 처음부터 데스크탑용으로 나온 1과 달리 이번 2는 모바일/임베디드에서의 사용을 고려하여 빠른 성능을 목표로 개발되었다.
  • Qt Creator 4.0
    • Qt Quick Designer를 대대적으로 업그레이드하였다.

6.3 Qt 4에서 Qt 5로 이전

Qt 5는 Qt 4와의 바이너리 호환성, 소스 호환성 모두 공식적으로 지원하지 않는다. 하지만 몇몇 코드를 수정함으로써 간단히 Qt 5로 이전 가능하다. 자세한 내용은 [6]를 참조할 것.

7 Qt 5 모듈 구성 [1]

Qt 5는 개발 정책, 라이센스에 따라 몇 가지 카테고리로 나누어져 있다.

7.1 Qt Essentials

위 항목의 공식 지원 플랫폼을 모두 지원하는 표준 모듈

  • Qt Core
모든 모듈에서 사용하는 코어 클래스들을 제공하는 모듈. 그래픽 관련 기능은 들어있지 않음.
  • Qt GUI
GUI 관련 기능을 제공하는 기본 클래스들. OpenGL을 포함하고 있음.
  • Qt Multimedia
오디오, 비디오, 라디오, 카메라 기능을 가진 클래스들.
  • Qt Multimedia Widgets
멀티미디어 기능을 위젯 기반으로 제공하는 클래스들.
  • Qt Network
보다 편리하게 네트워크 기능을 사용하기 위한 클래스들.
  • Qt QML
QML과 자바스크립트 언어를 지원하는 클래스들.
  • Qt Quick
커스텀 유저 인터페이스를 비롯한 고수준의 동적 어플리케이션을 개발 가능한 프레임워크
  • Qt Quick Control
기존의 데스크탑 스타일의 유저 인터페이스를 개발하기 위한 Qt Quick 기반의 UI 컨트롤을 제공
  • Qt Quick Dialog
Qt Quick 어플리케이션에 시스템 다이얼로그를 제공
  • Qt Quick Layouts
Qt Quick2상에서 아이템의 레이아웃 기능을 제공
  • Qt SQL
SQL 기능을 Qt에 통합
  • Qt Webkit
Webkit2 기반의 클래스와 QML용 API를 제공
  • Qt Webkit Widgets
Webkit1과 QWidget 기반의 클래스들
  • Qt Widgets
Qt4에서 사용되었던 C++ Qt GUI 클래스들

7.2 Qt Add-Ons

지원하는 플랫폼에 제한이 있음. 향후 공식 플랫폼을 모두 지원할 경우 Qt Essential이 될 수 있음.

7.3 Value-Add 모듈

상용 라이센스에서 사용하는 추가 모듈들. 오픈소스가 아님.

7.4 Technology Preview 모듈

현재 개발 / 리뷰 중인 모듈. 오픈소스로 개발이 진행됨.

7.5 Qt Tools

Qt 개발 생산성을 높이기 위한 툴들

8 Qt Creator IDE

9 QML

10 타 언어로의 바인딩

10.1 Python : PySide, PyQt

다음 페이지에서 PyQT5를 다운로드할 수 있다. 간편한 방법으로는 cmd에 pip install PyQt5 라고 치면 된다. 자동으로 다운로드되어 설치된다.

Qt Company가 2016년 4월 부로 PySide 프로젝트를 공식 지원하겠다고 발표했다. 만세 프로젝트의 목표는 PySide2가 Qt5 프레임워크의 일부로서 동시에 릴리즈되는 것이라고 한다. *nix 계열에서 데스크탑 앱을 개발하기가 한결 쉬워질 듯. Python으로 Qt 개발한다고 하면 PyQt부터 시작하기 마련인데 [2], 차후에는 PySide가 메인이 될 전망이다. 인용 오류: <ref></code> 태그를 닫는 <code></ref> 태그가 없습니다 : Well, PyQt is a different thing from Riverbank Computing and not connected to TQC. PySide will become the real thing. At least that is the plan ;-) </ref>

10.2 기타 언어

11 문서와 커뮤니티

11.1 공식 문서

API 레퍼런스, 튜토리얼 등의 문서가 아주 잘 구비되어 있다. (영어)
참고로 이렇게 잘 설명된 문서는 거의 찾아보기 힘들다. 상당히 직관적이어서 조금만 익숙해지면 상당히 깔끔하게 프로그래밍이 가능하다.


참고: 유튜브에는 VoidRealms 이라는 아이디를 가진 개발자가 가장 기초가 되는 QT의 각 클래스들을 하나씩 하나씩 약 10분 내외의 짧은 영상으로 설명해 둔 것이 있다. 물론 영어로 되어 있지만 처음부터 코딩을 써나가면서 진행하기때문에 영어가 조금만 되면 문제없이 이해할 수 있을 정도이다. 개인적으로 강력추천한다.

  • 한국어 문서는 추가 바람

11.2 커뮤니티

[8]에서 Qt 관련 지식을 질의응답 가능하며 StackOverflow에서도 질의응답이 활발히 이루어지고 있다.

  • 한국어 커뮤니티는 [9], [10]이 있다. 다른 커뮤니티가 있으면 추가바람.

12 기타

2015년 5월 20일자로 Qt 20 주년을 맞이하였다. [11]

Qt Company 서울 오피스가 있다. 일본의 경우 직영 오피스는 존재하지 않고 파트너사인 SRA에 세일즈와 서포트를 맡기고 있다.

파이썬이나 기타 언어와 연동이 된다는 점에서 C++ GUI를 MFC로만 가르치는 학교에서, 다른 학생들이 MFC로 짤동안 해당 과목을 주요 코드는 일주일만에 파이썬으로 다 짜버리고 Qt로 얹어서 A를 받은 위키러의 실화가 있다. 교수는 GUI를 MFC로만 짜라 한적 없다고 (...) 반칙아닌가 파이썬으로 GUI를 짜는데 외부 라이브러리들이 사용감이 후지다면(...) 그냥 PyQt로 UI를 드래그앤 드롭으로 배치하고 소스를 python 연동으로 출력한 다음, 본래 기능이랑 이어주면 끝이라서 C++ 오픈소스지만 파이썬으로도 많이 쓰는 모양.

PyQt 생활코딩 페이지
PySide

PySide 한국어 번역(일부)
  1. http://doc.qt.io/qt-5/qtmodules.html
  2. 생활코딩 튜토리얼 등등..