Qt(프레임워크)
[image]
The Qt Company에서 개발한 오픈 소스 C++ 개발 프레임워크. '큐트'라고 읽는다. C++와 QML이라는 자체 스크립트 언어를 기반으로 한다.
2020년 9월 기준 현재 최신 버전은 Qt 5.15와 Qt Creator 4.11.1이다. https://download.qt.io/archive/qt/
"Write once, compile anywhere"를 표방하는 크로스 플랫폼 프레임워크이며, 현존하는 주요 플랫폼(Windows, Linux, OSX, Android, iOS 등)을 거의 대부분 지원한다. 초기에는 크로스플랫폼 GUI 라이브러리로 시작하였으나, 점점 기능이 확대되어 각종 UI 개발 도구, 번역 작업을 위한 도구와 C++ 개발에 필요한 온갖 기능(UI, XML, 네트워크, SVG, Animation, Container Class 등등)을 제공하는 종합 프레임워크가 되었다.[2]
Qt 5.8 기준. 다른 버전, 대응 컴파일러를 비롯한 자세한 내용은 http://doc.qt.io/qt-5/supported-platforms-and-configurations.html를 참조.
이외에도 Qt Company, 다른 개발사, 오픈 커뮤니티 등에서 공식/비공식으로 지원 가능한 플랫폼이 존재한다.
참조http://doc.qt.io/qt-5/supported-platforms.html
라이선스 비교는 http://www.qt.io/licensing-comparison/를 참조할 것.
Qt 5.8 현재
공식 기술지원이 없는 커뮤니티 라이센스의 경우 무료로 사용가능하나 Qt 라이브러리의 대부분이 소스코드를 공개해야하는 GPL 라이센스이고 Qt Charts와 같은 GPL로 배포되는 모듈을 사용하는 경우에도 앱 소스코드를 공개해야 한다. LGPL로 빌드하면 GPL에 해당되는 모듈을 쓰면 안되고 제약이 많다. 앱 소스코드 공개없이 클로즈드 소스로 판매하려면 상업용 Qt 라이센스를 구입하여야 하며 이 경우 연간 구독요금이 $3950이고 UI빌더 툴도 별도로 구입해야 하며 연간 $999이 추가된다. 2020년기준 가격.
원래 트롤텍이라는 회사에서 개발했으나 노키아가 트롤텍을 인수한 이후에는 노키아에서 관리하였으며, 2012년 8월 9일 Digia에게 넘어갔다. 2014년 The Qt Company라는 이름으로 Digia 자회사로 독립하였다.
현재 공식적으로 지원하는 메이저 버전은 Qt 5이다. Qt 4는 2015년 12월 이후 신규 클라이언트를 받지 않고 있다. 다만 기존 고객은 2019년까지 지원 예정
Qt 4와 Qt 5는 개발 이념에 상당한 차이가 있다.
2015년 7월 1일 릴리스 되었다.
2016년 3월 16일 릴리스 되었다.
2016년 6월 16일 정식 릴리스 되었다. 5.6이 나온지 3개월밖에 안됐는데 벌써 나왔다.
2017년 1월 23일 정식 릴리즈 되었다.
2020년 12월 8일 정식 릴리즈 되었다.
자세한 내용은 https://www.qt.io/blog/qt-6.0-released를 참조할 것
Qt 5는 개발 정책, 라이선스에 따라 몇 가지 카테고리로 나누어져 있다.
위 항목의 공식 지원 플랫폼을 모두 지원하는 표준 모듈
지원하는 플랫폼에 제한이 있음. 향후 공식 플랫폼을 모두 지원할 경우 Qt Essential이 될 수 있음.
상용 라이선스에서 사용하는 추가 모듈들. 오픈소스가 아님.
현재 개발 / 리뷰 중인 모듈. 오픈소스로 개발이 진행됨.
Qt 개발 생산성을 높이기 위한 툴들
Qt 프레임워크 개발을 위한 통합 개발 환경.
비주얼 스튜디오(2017)용 플러그인도 존재하는데, 이 플러그인은 그저 비주얼 스튜디오에서 Qt를 쓸 수 있게 환경을 만들어주는 것이고 기본적으로는 Qt 자체가 미리 설치되어 있어야 한다. 여기에서 official_releases/ → online_installers/ → 각 OS에 맞는 실행 파일을 클릭해 통합 인스톨러를 다운받고 상용 라이선스를 사용하고 싶다면 해당 라이선스가 활성화된 계정으로, LGPL 라이선스를 사용하고 싶다면 무료 계정으로 로그인하거나 비로그인 상태로 진행하면 된다.
설치가 끝나면 Qt를 비주얼 스튜디오와 연동시켜야 한다. 우선 Qt를 설치할 때 같이 깔리는 Qt Creator를 실행한 후, Tools → Options → Build & Run → Qt Versions 탭으로 들어간다. 'Auto-Detected' 항목 아래의 Qt 버전을 클릭하면 밑에 버전의 이름 및 qmake의 경로가 표시된다. 그리고 비주얼 스튜디오 2017에서 Qt 플러그인을 설치한 뒤 상단의 Qt VS Tools → Qt Options → Qt Versions로 들어간 다음, 'Add'를 누르고 방금 Qt Creator에서 확인한 버전 이름과 qmake 경로의 \\bin 이전까지를 입력하면 연동이 완료된다.
파이썬 바인딩으로 PyQt와 PySide가 주로 사용된다.
PyQt는 GPL과 동시에 상업적 사용 혹은 GPL을 벗어난 사용을 원하는 사람을 위한 상용 라이선스를 판매하고 있으며, PySide는 LGPL, GPLv2, 사용 라이선스를 복수 사용하고 있다. 사실 초기에는 PySide가 없었고 PyQt만이 존재했었다. 그래서 당시 Qt의 저작권자였던 노키아가 PyQt의 개발사인 Riverbank Computing에게 자사와의 제휴와 더불어 PyQt의 저작권을 Qt 원본처럼 LGPL로 변경할 것을 제안했으나 거절당했고[4] 이에 노키아가 직접 Python용 Binding을 하나 더 제작하기로 결정해서 탄생한 것이 PySide다. 이후 Qt Company가 노키아로부터 분리될 때 PySide에 대한 권리까지 같이 승계되어서 지금까지 내려오고 있다.
Qt Company가 2016년 4월 부로 PySide 프로젝트를 공식 지원하겠다고 발표했다.
프로젝트의 목표는 PySide2가 Qt5 프레임워크의 일부로서 동시에 릴리즈되는 것이라고 한다.[5] 아직은 Python으로 Qt 개발한다고 하면 PyQt부터 시작하는 편이지만, 차후에는 PySide가 메인이 될 전망이다.[* Christian Tismer(PyPy 개발자 중 한 명) : 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 ;-)
PyPI로 설치하는 방법
PyPI로 설치하는 방법
Node.js용 바인딩으로 nodegui가 있다. React를 UI 제작에 사용할 수도 있다. 다만 2019년에 시작된 프로젝트라서 지원되지 않는 컴포넌트도 많고, Node.js를 커스텀한 빌드를 사용하기 때문에 원래는 없는 문제가 생길 여지도 있다.
API 레퍼런스, 튜토리얼 등의 문서가 아주 잘 구비되어 있다. (영어)
참고로 이렇게 잘 설명된 문서는 거의 찾아보기 힘들다. 상당히 직관적이어서 조금만 익숙해지면 상당히 깔끔하게 프로그래밍이 가능하다.
참고: 유튜브에는 VoidRealms이라는 아이디를 가진 개발자가 가장 기초가 되는 QT의 각 클래스들을 하나씩 하나씩 약 10분 내외의 짧은 영상으로 설명해 둔 것이 있다. 물론 영어로 되어 있지만 처음부터 코딩을 해나가면서 진행하기 때문에 영어가 조금만 되면 문제없이 이해할 수 있을 정도이다.
http://forum.qt.io/에서 Qt 관련 지식을 질의응답 가능하며 Stack Overflow에서도 질의응답이 활발히 이루어지고 있다.
한국어 커뮤니티는 https://wiki.qt.io/Main/ko http://qt-dev.com/, http://korone.net/이 있다.
찾기 쉽게 알파벳 / 가나다순으로 정리했다.
2015년 5월 20일자로 Qt 20 주년을 맞이하였다. https://blog.qt.io/blog/2015/05/20/happy-20th-anniversary-qt/
Qt Company 서울 오피스가 있다. 일본의 경우 Qt Company Japan 오피스와 파트너사인 SRA가 분담해서 업무를 맡고 있다.
파이썬으로 GUI를 짜는데 외부 라이브러리들[7] 이 사용감이 후지다면 그냥 PyQt로 UI를 드래그 앤 드롭으로 배치하고 소스를 파이썬 연동으로 출력한 다음, 본래 기능이랑 이어주면 끝이다. 그래서 C++ 오픈소스지만 파이썬으로도 많이 쓰는 편.
PyQt 생활코딩 페이지
PySide
PySide 한국어 번역(일부)
- 홈페이지 : https://www.qt.io/
- 페이스북 : https://www.facebook.com/qt
- 인스타그램 : https://www.instagram.com/theqtcompany
- 유튜브 : https://www.youtube.com/user/QtStudios
1. 개요
The Qt Company에서 개발한 오픈 소스 C++ 개발 프레임워크. '큐트'라고 읽는다. C++와 QML이라는 자체 스크립트 언어를 기반으로 한다.
2020년 9월 기준 현재 최신 버전은 Qt 5.15와 Qt Creator 4.11.1이다. https://download.qt.io/archive/qt/
"Write once, compile anywhere"를 표방하는 크로스 플랫폼 프레임워크이며, 현존하는 주요 플랫폼(Windows, Linux, OSX, Android, iOS 등)을 거의 대부분 지원한다. 초기에는 크로스플랫폼 GUI 라이브러리로 시작하였으나, 점점 기능이 확대되어 각종 UI 개발 도구, 번역 작업을 위한 도구와 C++ 개발에 필요한 온갖 기능(UI, XML, 네트워크, SVG, Animation, Container Class 등등)을 제공하는 종합 프레임워크가 되었다.[2]
2. Qt 5 지원 플랫폼
2.1. Qt 공식 지원 플랫폼
Qt 5.8 기준. 다른 버전, 대응 컴파일러를 비롯한 자세한 내용은 http://doc.qt.io/qt-5/supported-platforms-and-configurations.html를 참조.
- Windows 10 64/32bit, Windows 8 64/32bit, Windows 7 64/32bit
- Linux - OpenSuSE 42.1 64bit, Red Hat Enterprise 6.6 / 7.2 64bit, Ubuntu 14.04 64bit 등등
- macOS 10.12 10.11, 10.10, 10.9
- Embedded Linux
- QNX 6.6.0
- Windows Embedded 7, Windows Phone 8.1(arm), Windows RT, Universal Window Platform(UWP)
- iOS 7 이상
- Android API Level 16
- Apple tvOS (technology preview)
- Apple watchOS (technology preview)
2.2. 그 이외 지원 플랫폼
이외에도 Qt Company, 다른 개발사, 오픈 커뮤니티 등에서 공식/비공식으로 지원 가능한 플랫폼이 존재한다.
참조http://doc.qt.io/qt-5/supported-platforms.html
- Tizen
- Sailfish
- BlackBerry 10
- VxWorks
- Embedded Android
3. 라이선스/서포트 정책
라이선스 비교는 http://www.qt.io/licensing-comparison/를 참조할 것.
Qt 5.8 현재
- 오픈 소스 라이선스
- 상용 라이선스
- Seat별 라이선스 계약이 필요하며, Embedded의 경우 디바이스 탑재 러닝 로열티가 추가로 부과된다.
- LGPL v3 도입에 따른 영향
- Qt 5.7부터 LGPL v2.1이 폐지되었다. LGPL v3 상에서 개발할 경우 디바이스에 탑재되는 Qt Framework는 반드시 유저가 기기를 해킹할 수 있도록 만들어야 하는 조건이 생겼다.(Tivoization 방지) 이로 인해 인포매틱스 업체 등 디바이스에 Qt를 넣는 기업들은 유저의 해킹을 허용하는 방안을 생각하기가 힘드므로 Qt 5.6을 쓰던가 상용 라이선스를 구매해야 한다.
- iOS의 동적 링크 라이브러리 미지원
- iOS가 dylib을 지원한 건 8.0 버전부터이다. 아직 iOS 플랫폼용 Qt는 정적 링크 라이브러리만 지원하므로 LGPL 상에서는 Qt 사용자도 오브젝트 코드를 공개해야 한다. IP를 보호하고 싶으면 iOS에서는 상용 라이선스를 이용할 수밖에 없다.
- 2015년 12월 이후부터 신규 고객에 대한 라이선스 계약은 이뤄지지 않고 있다. 다만 기존 고객은 2019년까지 연장 가능하다.
4. Qt 라이선스 비용
공식 기술지원이 없는 커뮤니티 라이센스의 경우 무료로 사용가능하나 Qt 라이브러리의 대부분이 소스코드를 공개해야하는 GPL 라이센스이고 Qt Charts와 같은 GPL로 배포되는 모듈을 사용하는 경우에도 앱 소스코드를 공개해야 한다. LGPL로 빌드하면 GPL에 해당되는 모듈을 쓰면 안되고 제약이 많다. 앱 소스코드 공개없이 클로즈드 소스로 판매하려면 상업용 Qt 라이센스를 구입하여야 하며 이 경우 연간 구독요금이 $3950이고 UI빌더 툴도 별도로 구입해야 하며 연간 $999이 추가된다. 2020년기준 가격.
5. The Qt Company
원래 트롤텍이라는 회사에서 개발했으나 노키아가 트롤텍을 인수한 이후에는 노키아에서 관리하였으며, 2012년 8월 9일 Digia에게 넘어갔다. 2014년 The Qt Company라는 이름으로 Digia 자회사로 독립하였다.
6. Qt 4 vs Qt 5
현재 공식적으로 지원하는 메이저 버전은 Qt 5이다. Qt 4는 2015년 12월 이후 신규 클라이언트를 받지 않고 있다. 다만 기존 고객은 2019년까지 지원 예정
Qt 4와 Qt 5는 개발 이념에 상당한 차이가 있다.
6.1. Qt 4
- 개요
최신 버전은 4.8.7. 2015년 상반기에 릴리즈 후 더이상의 추가 개발은 이루어지지 않고 있다. 2015년 12월 19일을 기점으로 더이상의 서포트 계약을 받지 않고 있다. 다만 기존에 서포트를 받았던 고객은 4년간 더 계약연장이 가능하다고 공표하였으며, 이는 어디까지나 Qt 5에 대한 마이그레이션에 시간이 필요한 고객을 위한 조치라고 한다.
- 개발 이념
- 어플리케이션 프레임워크
단순히 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 어플리케이션을 개발할 필요는 없다. 서포트는 2019년까지 지속되므로 유지보수 업데이트는 이루어 질 수 있으나 기능상으로는 더 이상 크게 추가되는 일은 없을 듯. Qt 4의 기능은 대부분 Qt 5에서 제공하고 있다.
다만, PySide를 사용하고 있는 경우, 상당한 주의가 필요하다. Qt 5용 PySide의 개발이 지지부진하기 때문. 만약 데스크탑에서 강력한 기능 / 빠른 생산성을 가진 프로토타입 개발 환경이 필요하다면, Qt 5 Qt Quick Control 보다는 Qt 4 기반의 PySide를 추천.
다만, 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 라이선스와 Qt Creator(IDE 기반의 개발 환경) 그리고 QML.
6.2. Qt 5
- 개요
최신 버전은 5.10.0. Qt 5는 초기 개발 이념이 Qt 4와 상당히 다른데다가, 초기 악평이 많아서 많은 어플리케이션 개발자들은 Qt 5로의 개발을 보류중이다. Qt 5.0, 5.1, 5.2까지는 Qt 컨설턴트들도 사용을 극구 말릴 정도.
- 개발 이념
- QML(Qt Quick Markup Language)의 전면 부상
Qt 5 프레임워크 자체는 C++로 개발되어 있고 C++ API를 제공하나, 핵심 기능은 전부 QML + JavaScript API를 통해 개발이 가능하도록 한다. Qt 5의 가장 중요한 이념이라 할 수 있다. QML은 Qt에서 제공하는 독자적 개발 언어로, 문법은 CSS와 닮았으며 JavaScript를 섞어서 사용한다. 참고로, QML이 무엇의 약자인지는 Qt 개발자들도 모른다고 한다. 공식적으로도 Qt에서는 QML이 무슨 약자인지를 설명하고 있지 않다. 하지만 윈도우 탐색기의 확장자 설명에 적혀 있는 바에 따르면 Qt Quick Markup Language를 의미하는 것으로 보인다.
- 그래픽용 백엔드
그래픽용 백엔드는 더 이상 GDI+ CoreGraphics등의 플랫폼의 네이티브 API를 사용하지 않고 OpenGL / OpenGL ES / DirectX / Vulkan를 사용한다. 이로 인해 플랫폼에서의 OpenGL API 제공이 필수가 되었지만, 반대로 별도의 그래픽용 API를 제공하지 않아도 간단히 Qt를 포팅할 수 있게 되었다.
- 메이저 모바일 플랫폼 지원
안드로이드와 iOS를 전폭적으로 지원한다. (노키아가 Qt를 버리지 않았으면 불가능했을 수도...)
특히 iOS의 경우 앱 배포시 문제가 되었던 자바스크립트 엔진 V8의 runtime compile과 Native WebView 문제가 Qt 5.4, 5.5에서 해결되면서, iOS용 앱 개발에 대한 제한이 상당부분 사라지게 되었다.
특히 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을 사용하는 것을 긍정적으로 검토중이다.
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의 지원이 개선됨
- OS X 10.8, 10.9, 10.10을 지원
- Windows 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을 더이상 적용하지 않는다.
- LGPL v3
- Qt 3D
- Technical Preview라는 딱지를 떼고 정식으로 지원하는 모듈이 되었다.
- Qt Quick Controls 2 완벽지원
- 처음부터 데스크탑용으로 나온 1과 달리 이번 2는 모바일/임베디드에서의 사용을 고려하여 빠른 성능을 목표로 개발되었다.
- Qt Creator 4.0
- Qt Quick Designer를 대대적으로 업그레이드하였다.
6.2.4. Qt 5.8
2017년 1월 23일 정식 릴리즈 되었다.
- QtQuick 렌더링이 OpenGL 의존에서 벗어나 Vulkan이나 Direct3D 등의 백엔드에서 렌더링 가능하도록 개선되었다.
- 새 모듈의 등장
- Qt Wayland Compositor
- Qt SCXML
- Qt Serial Bus
- 새 플랫폼 지원
- Apple tvOS (technology preview)
- Apple watchOS (technology preview)
6.2.5. Qt 6.0
2020년 12월 8일 정식 릴리즈 되었다.
자세한 내용은 https://www.qt.io/blog/qt-6.0-released를 참조할 것
6.3. Qt 4에서 Qt 5로 이전
Qt 5는 Qt 4와의 바이너리 호환성, 소스 호환성 모두 공식적으로 지원하지 않는다. 하지만 몇몇 코드를 수정함으로써 간단히 Qt 5로 이전 가능하다. 자세한 내용은 https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5를 참조할 것.
주로 변경할 6가지 사항은 https://qiita.com/yasumodev/items/b304966f6999fbea920d를 참조하며, 이는 리눅스 / 윈도우 공통 사항이다. 특히, Qt4 프로젝트를 연동할 때, greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 이 부분은 잊지 말고 꼭 넣어주도록 하자.
7. Qt 5 모듈 구성 [3]
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
Qt 프레임워크 개발을 위한 통합 개발 환경.
비주얼 스튜디오(2017)용 플러그인도 존재하는데, 이 플러그인은 그저 비주얼 스튜디오에서 Qt를 쓸 수 있게 환경을 만들어주는 것이고 기본적으로는 Qt 자체가 미리 설치되어 있어야 한다. 여기에서 official_releases/ → online_installers/ → 각 OS에 맞는 실행 파일을 클릭해 통합 인스톨러를 다운받고 상용 라이선스를 사용하고 싶다면 해당 라이선스가 활성화된 계정으로, LGPL 라이선스를 사용하고 싶다면 무료 계정으로 로그인하거나 비로그인 상태로 진행하면 된다.
설치가 끝나면 Qt를 비주얼 스튜디오와 연동시켜야 한다. 우선 Qt를 설치할 때 같이 깔리는 Qt Creator를 실행한 후, Tools → Options → Build & Run → Qt Versions 탭으로 들어간다. 'Auto-Detected' 항목 아래의 Qt 버전을 클릭하면 밑에 버전의 이름 및 qmake의 경로가 표시된다. 그리고 비주얼 스튜디오 2017에서 Qt 플러그인을 설치한 뒤 상단의 Qt VS Tools → Qt Options → Qt Versions로 들어간 다음, 'Add'를 누르고 방금 Qt Creator에서 확인한 버전 이름과 qmake 경로의 \\bin 이전까지를 입력하면 연동이 완료된다.
9. QML
10. 타 언어로의 바인딩
10.1. Python Binding for Qt
파이썬 바인딩으로 PyQt와 PySide가 주로 사용된다.
PyQt는 GPL과 동시에 상업적 사용 혹은 GPL을 벗어난 사용을 원하는 사람을 위한 상용 라이선스를 판매하고 있으며, PySide는 LGPL, GPLv2, 사용 라이선스를 복수 사용하고 있다. 사실 초기에는 PySide가 없었고 PyQt만이 존재했었다. 그래서 당시 Qt의 저작권자였던 노키아가 PyQt의 개발사인 Riverbank Computing에게 자사와의 제휴와 더불어 PyQt의 저작권을 Qt 원본처럼 LGPL로 변경할 것을 제안했으나 거절당했고[4] 이에 노키아가 직접 Python용 Binding을 하나 더 제작하기로 결정해서 탄생한 것이 PySide다. 이후 Qt Company가 노키아로부터 분리될 때 PySide에 대한 권리까지 같이 승계되어서 지금까지 내려오고 있다.
Qt Company가 2016년 4월 부로 PySide 프로젝트를 공식 지원하겠다고 발표했다.
프로젝트의 목표는 PySide2가 Qt5 프레임워크의 일부로서 동시에 릴리즈되는 것이라고 한다.[5] 아직은 Python으로 Qt 개발한다고 하면 PyQt부터 시작하는 편이지만, 차후에는 PySide가 메인이 될 전망이다.[* Christian Tismer(PyPy 개발자 중 한 명) : 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 ;-)
10.1.1. PyQt5 설치 방법
PyPI로 설치하는 방법
pip install PyQt5
10.1.2. PySide2 설치 방법
PyPI로 설치하는 방법
pip install PySide2 # For the latest version on PyPi
10.2. Qt binding for Go (Golang)
10.3. 기타 언어
Node.js용 바인딩으로 nodegui가 있다. React를 UI 제작에 사용할 수도 있다. 다만 2019년에 시작된 프로젝트라서 지원되지 않는 컴포넌트도 많고, Node.js를 커스텀한 빌드를 사용하기 때문에 원래는 없는 문제가 생길 여지도 있다.
11. 문서와 커뮤니티
11.1. 공식 문서
API 레퍼런스, 튜토리얼 등의 문서가 아주 잘 구비되어 있다. (영어)
참고로 이렇게 잘 설명된 문서는 거의 찾아보기 힘들다. 상당히 직관적이어서 조금만 익숙해지면 상당히 깔끔하게 프로그래밍이 가능하다.
참고: 유튜브에는 VoidRealms이라는 아이디를 가진 개발자가 가장 기초가 되는 QT의 각 클래스들을 하나씩 하나씩 약 10분 내외의 짧은 영상으로 설명해 둔 것이 있다. 물론 영어로 되어 있지만 처음부터 코딩을 해나가면서 진행하기 때문에 영어가 조금만 되면 문제없이 이해할 수 있을 정도이다.
11.2. 커뮤니티
http://forum.qt.io/에서 Qt 관련 지식을 질의응답 가능하며 Stack Overflow에서도 질의응답이 활발히 이루어지고 있다.
한국어 커뮤니티는 https://wiki.qt.io/Main/ko http://qt-dev.com/, http://korone.net/이 있다.
12. Qt가 사용된 애플리케이션 / 플랫폼
찾기 쉽게 알파벳 / 가나다순으로 정리했다.
- Ableton Live
- Blizzard App
- Bitcoin 및 비트코인을 포크해서 만든 코인도 해당
- Genymotion
- KDE
- LINE Desktop
- LXQt
- : 개발 중단
- Mumble
- EA Origin
- GOG Galaxy
- SMPlayer: MPlayer의 프론트엔드. 자세한 건 MPlayer 항목 참조
- TeXStudio : TeXstudio is an integrated writing environment for creating LaTeX documents.
- Unity 2D(우분투)
- VirtualBox
- VLC
- 구글어스
- 데스크탑용 아마존 킨들 애플리케이션
- : 서비스 종료
- : 2016년 말까지만 운영하고 2017년 1월 1일부로 서비스 종료
- : Chromium 기반으로 갈아타기 이전만 해당
- : 2002는 Qt, 2005, 2008은 GTK 기반
- 마야
- 메디방페인트
- : Skype 4.3까지는 리눅스용 네이티브 클라이언트를 제공했으나 이후 Electron으로 갈아탐.
- 파이어알파카
- 텔레그램 Desktop
- RPG 만들기 MV, RPG 만들기 MZ - 에디터
- Dolphin [6]
- MuseScore
- 녹스 앱플레이어
- Yabause 계열의 세가 새턴 에뮬레이터
- XISMO
13. 기타
2015년 5월 20일자로 Qt 20 주년을 맞이하였다. https://blog.qt.io/blog/2015/05/20/happy-20th-anniversary-qt/
Qt Company 서울 오피스가 있다. 일본의 경우 Qt Company Japan 오피스와 파트너사인 SRA가 분담해서 업무를 맡고 있다.
파이썬으로 GUI를 짜는데 외부 라이브러리들[7] 이 사용감이 후지다면 그냥 PyQt로 UI를 드래그 앤 드롭으로 배치하고 소스를 파이썬 연동으로 출력한 다음, 본래 기능이랑 이어주면 끝이다. 그래서 C++ 오픈소스지만 파이썬으로도 많이 쓰는 편.
PyQt 생활코딩 페이지
PySide
PySide 한국어 번역(일부)
[1] http://doc.qt.io/qt-5/qtmodules.html[2] 이 때문에 코드 베이스가 상당히 거대해지고 복잡해져, 입문 난이도가 상승하는 부작용이 발생했다. 또한 소스 빌드를 할 때, 별 옵션 없이 기본값으로 빌드하는 경우 빌드시간이 굉장히 오래 걸리는 것과 타 프레임워크들에 비해 다소 큰 바이너리 크기는 덤.[3] http://doc.qt.io/qt-5/qtmodules.html[4] 여기서 Riverbank사의 공식 입장을 확인할 수 있는데, GPL 라이선스를 고집하는 이유는 자유 소프트웨어 재단에서 주장하는 자유 소프트웨어 공동체로부터의 독점 소프트웨어 개발자들에 대한 압박 같은 것과는 관계 없이 오로지 현재로서는 PyQt 이외의 수익 모델이 없기 때문에 PyQt 상용 라이선스의 판매를 위해서라고 한다.[5] *nix 계열에서 데스크탑 앱을 개발하기가 한결 쉬워질 듯.[6] 원래 wxWidgets를 사용하였으나, Qt로 이전하였다.[7] Tkinter, PyGTK, wxPython 등이 있지만 PyQt, PySide가 가장 세련된 결과물을 보여준다고 평가받고 있다. Tkinter는 Python Foundation 공식 기본 라이브러리인데도 플랫폼에 따라서 레이아웃이 조금씩 변형되고, 그나마 멀쩡하게 출력되어도 모습이 투박한 등 못써먹을 물건 취급이다.