{{위키데이터 속성 추적}}
{{소프트웨어 정보
| 이름 = Qt
| 화면 = Qt Creator 4 13 2 HeartRateGame.png
| 설명 = 임베디드 Qt를 이용한 [[Qt 크리에이터]]의 GUI 디자인
| 로고 = Qt logo neon 2022.svg
| 개발자 = {{기호없는 목록|[[Trolltech]] (1991–2008)||[[노키아]] (2008–2011)||[[Digia]] (2012–2014)|[[Qt 프로젝트]] (2011–현재)||[[Qt 컴퍼니]] (2014–현재)}}
| released             = {{시작 날짜와 나이|df=yes|1995|05|20}}<ref name="oreilly-qt">{{서적 인용|chapter-url=http://my.safaribooksonline.com/0131872494/pref04|archive-url=https://web.archive.org/web/20190923193951/https://my.safaribooksonline.com/0131872494/pref04|archive-date=2020-10-01|title=C++ GUI Programming with Qt 4 |last1=Blanchette |first1=Jasmin |last2=Summerfield |first2=Mark |publisher=[[Prentice-Hall]] |chapter= A Brief History of Qt | pages=xv–xvii |edition= 1st | date=June 2006| access-date=5 August 2013}}</ref>
| latest release version = {{wikidata|property|edit|reference|P348}}
| latest release date    = {{시작 날짜와 나이|{{wikidata|qualifier|P348|P577}}}}
| 운영체제 = [[크로스 플랫폼]]
| 종류 = 개발 라이브러리
| 라이선스 =[[GNU 일반 공중 사용 허가서|GPL]], [[GNU 약소 일반 공중 사용 허가서|LGPL]], [[상용 소프트웨어|상용 버전]]
| 웹사이트 = {{url|https://www.qt.io/}}
}}
'''Qt'''는 컴퓨터 프로그래밍에서 [[그래픽 사용자 인터페이스|GUI]] 프로그램 개발에 널리 쓰이는 크로스 플랫폼 프레임워크이다. 서버용 콘솔과 명령 줄 도구와 같은 비GUI 프로그램 개발에도 사용된다. 그래픽 사용자 인터페이스를 사용하는 경우에는 Qt를 [[위젯 툴킷]]으로 분류한다. 회사 내부에서는 Qt를 "cute"로 발음하고 있으며 비공식적으로는 "큐티"로 발음한다. Qt는 [[KDE]], [[Qtopia]], [[OPIE]]에 이용되고 있다,

노르웨이 회사 [[트롤텍]]에 의해서 개발되었다. 2008년 1월에는 [[노키아]]에 인수되었다.<ref>http://techcrunch.com/2008/01/28/nokia-acquires-trolltech-for-153-million/</ref> 이후, 2012년 8월에 핀란드 회사 [[Digia]]에 인수되었다.<ref>{{웹 인용 |url=http://blog.qt.nokia.com/2012/08/09/digia-extends-its-commitment-to-qt-with-plans-to-acquire-full-qt-software-technology-and-business-from-nokia/ |제목=보관된 사본 |확인날짜=2012년 8월 29일 |보존url=https://web.archive.org/web/20120819000739/http://blog.qt.nokia.com/2012/08/09/digia-extends-its-commitment-to-qt-with-plans-to-acquire-full-qt-software-technology-and-business-from-nokia/ |보존날짜=2012년 8월 19일 |url-status=dead }}</ref>

Qt는 [[C++]]를 주로 사용하지만, [[파이썬]], [[루비 (프로그래밍 언어)|루비]], [[C (프로그래밍 언어)|C]], [[펄]], [[파스칼 (프로그래밍 언어)|파스칼]]과도 연동된다. 수많은 플랫폼에서 동작하며, 상당히 좋은 국제화를 지원한다. [[SQL]] 데이터베이스 접근, [[XML]] 처리, [[스레드]] 관리, 단일 크로스 플랫폼 파일 관리 [[API]]를 제공한다.

== 종류 ==
Qt는 다음 플랫폼으로 개발된다.
* 리눅스/X11 — [[X 윈도 시스템]]([[유닉스]] / [[리눅스]])을 위한 Qt
* 맥 OS X — [[OS X]]을 위한 Qt
* 윈도 — [[마이크로소프트 윈도우]]를 위한 Qt
* 임베디드 리눅스 — [[PDA]], [[스마트폰]] 등의 임베디드 플랫폼을 위한 Qt
* 윈도 CE — [[윈도우 CE]] 등을 위한 Qt
* 심비안 - [[심비안]]을 위한 Qt
* 마에모- [[Maemo]]를 위한 Qt

각각 플랫폼에는 세 종류의 에디션이 있다.
* GUI 프레임워크 — 네트워크와 데이터베이스를 제외한 순수 GUI 개발 에디션.(데스크톱 라이트-Desktop Light-라고도 불린다.)
* 풀 프레임워크 — 상업용 개발을 위한 완전한 에디션.
* 오픈 소스 — 오픈 소스 개발을 위한 완전한 에디션.

=== 비주얼 스튜디오 및 볼랜드 C++ 빌더 지원 ===
[http://sourceforge.net/projects/qtwin/ Q../Free] 프로젝트는 몇몇 패치 [http://sourceforge.net/project/showfiles.php?group_id=49109]를 내어 놓았다. 이 패치는 비주얼 스튜디오 및 볼랜드 C++ 빌더 지원을 Qt/Windows 오픈 소스 에디션에 추가한다.

== 현재 ==
트롤텍은 Qt 4를 [[2005년]] [[6월 28일]]에 내 놓았으며 다섯 가지의 중요한 새 기술을 추가하였다.

* 튤립(Tulip) - 템플릿 컨테이너 클래스 모음.
* 인터뷰(Interview) - 항목 보기를 위한 모델/뷰 아키텍처.
* 아서(Arthur) - 2차원 그리기 프레임워크.
* 스크라이브(Scribe) - 낮은 수준의 텍스트 레이아웃을 지원하는 유니코드 텍스트 렌더러.
* 메인윈도(MainWindow) - 액션 기반의 메인 윈도, 도구 모음, 메뉴, 도킹 아키텍처.

Qt 4는 모든 플랫폼에서 GPL, LGPL과 상용 라이선스 세 종류로 제공된다. 하지만 Qt/Windows 3.3 이하는 상용 라이선스만으로 제공된다.

[[2005년]] [[12월 19일]]에 출시된 Qt 4.1은 [[SVG]] Tiny 지원을 추가하였고, Qt 인쇄 시스템에 [[PDF]] 백엔드를 추가했다. 또한 [https://web.archive.org/web/20060315161449/http://www.trolltech.com/newsroom/announcements/00000229.html 이 곳]에서 추가적인 기능을 확인할 수 있다.

== 역사 ==
하버드 노드(Haavard Nord)와 에이릭(Eirik Chambe-Eng, Qt의 원 개발자이자 현재 트롤텍의 CEO) 둘은 [[1991년]] Qt의 개발을 시작했다. 이 회사의 이름은 퀘이사 테크놀로지스(Quasar Technologies)로 시작해서, 트롤 테크(Troll Tech), 트롤테크(Trolltech)로 바뀌어 갔다. 하버드의 [[이맥스]] 글꼴 중 Q라는 글자가 예뻐 보였고, t는 X 툴킷 [[Intrinsics|Xt]]에서 따 와서 Qt라는 이름을 붙였다.

[[1998년]] KDE가 [[리눅스]] 데스크톱 환경으로 많이 사용되면서 논쟁이 시작되었다. KDE는 Qt를 사용하고, 많은 오픈 소스나 자유 소프트웨어에 연관된 사람들이 그들의 운영체계의 주된 부분이 상용 소프트웨어라는 것에 우려를 표했다. 이것은 두 결과를 가지고 왔다. 하나는 [[하모니 툴킷]]이라고 하는 자유 소프트웨어로 된 Qt의 복제품이었고, 또 다른 하나는 KDE를 대체할 수 있는 [[그놈]] 데스크톱이었다. 그놈은 [[김프]]를 위해서 작성된 [[김프 툴킷|GTK+]]를 사용했고, 그것은 자유롭게 사용 가능했기 때문이다.

버전 1.45까지 Qt의 원본 코드는 FreeQt 라이선스로 공개되었다. 하지만 자유 소프트웨어 재단은 수정된 버전을 재배포할 수 없었기 때문에 이것이 오픈 소스의 정신에 부합된다고 생각하지 않았다. Qt 2.0이 나오면서 [[Q 퍼블릭 라이선스]]로 공개되었다. 이것은 자유 소프트웨어 라이선스이지만 자유 소프트웨어 재단에서는 [[GNU 일반 공중 사용 허가서|GPL]]과 호환될 수 없다고 하였다. KDE와 트롤텍 사이에서 트롤텍이 파산을 해도 Qt가 QPL보다 더 제약 사항이 많은 라이선스로 바뀌는 것을 막기 위해서 [https://web.archive.org/web/20070127134848/http://www.kde.org/whatiskde/kdefreeqtfoundation.php KDE 자유 Qt 재단] 을 만들었다. 이 재단에서는 Qt의 오픈 소스 버전이 12개월 동안 공개되지 않는 경우 Qt가 자동으로 BSD 라이선스로 전환하도록 한다.

Qt의 초기 버전은 유닉스용 Qt/X11, 윈도용 Qt/Windows 두 가지 플랫폼만 지원했다. 윈도용은 상업적 라이선스로만 사용할 수 있었다. 2001년 말 Qt 3.0이 나오면서 [[맥 OS X]] 지원이 추가되었다. Mac OS X 지원은 2003년 6월 Qt 3.2의 GPL 버전이 OS X을 지원하기 전까지는 상용으로만 사용할 수 있었다.

2002년 KDE on Cygwin 프로젝트의 회원들이 GPL로 공개된 Qt/X11 코드를 윈도우에서 사용할 수 있도록 포팅 작업을 하고 있었다. [http://qtwin.sourceforge.net/qt3-win32/history.php] {{웨이백|url=http://qtwin.sourceforge.net/qt3-win32/history.php |date=20100731070812 }} 이것은 윈도가 오픈소스 환경이 아니기 때문에 트롤텍이 Qt/Windows를 GPL로 공개하지 않았기 때문에 시작되었다. [http://lists.kde.org/?l=kde-cygwin&m=104431728920022&w=2][https://web.archive.org/web/20031005175911/http://www.trolltech.com/developer/faqs/noncomm.html] 이 프로젝트는 상용화 단계에 들어갈 수 없었지만 많은 성공을 거두었다. Qt/Windows 4가 2005년 6월 GPL로 공개되면서 존재할 필요가 없어졌다. Qt 4부터는 상용 에디션과 오픈소스 에디션 간의 플랫폼 차이가 없다.

== 디자인 ==
=== 클래스 디자인 ===
Qt 4.0 기준으로 다음과 같은 클래스로 나뉘어 있다.
* QtCore – 핵심 클래스
* QtGui – 그래픽 사용자 인터페이스 구성요소
* QtNetwork – 네트워크 구성요소
* QtOpenGL – OpenGL 구성요소
* QtSql – SQL 데이터베이스 구성요소
* QtSvg – SVG 그림 구성요소
* QtXml – XML 파서 구성요소
* QtDesigner – Qt 디자이너를 위한 클래스
* QtUiTools – Qt 디자이너 폼을 다루는 클래스
* QtAssistant – 온라인 도움말을 위한 클래스
* Qt3Support – Qt 3 호환성 클래스
* QtTest – 프로그램 테스트를 위한 클래스

Qt 라이브러리를 사용하는 데 도움을 주는 도구는 다음과 같다.
* Qt-Creator - IDE 툴로 개발 및 디버깅 문법검사를 지원한다.
* Qt-Designer – Qt 프로그램의 폼을 작성해 준다.
* Qt-Assistant – 온라인 문서를 제공한다.
* Qt-Linguist, lupdate und lrelease – 프로그램의 지역화를 도와 준다.
* qmake – ([[qmake]] 참고)
* moc – Qt 메타 정보 컴파일러
* uic – Qt 폼 컴파일러 (.ui -> .h)
* rcc – Qt 리소스 컴파일러<sup>1</sup>

<small>1. 현재 Qt는 리소스를 자체적으로 지원하는 윈도나 OS X에서 그 기능을 사용하지 않는다.</small>

Qt가 처음 나왔을 때의 디자인적인 혁명은 다음과 같다.

=== GUI의 완전한 추상화 ===
Qt는 자체 페인팅 엔진과 컨트롤을 사용하며, 실행되는 플랫폼의 모습을 최대한 따라한다. 따라서 Qt는 플랫폼에 의존적인 코드를 거의 사용하지 않았으므로 서로 다른 플랫폼으로 이식하는 것이 쉬웠다. 하지만 이 방법은 서로 다른 플랫폼의 모습을 정교하게 따라하도록 해야 하는 것이다. 최근 버전의 Qt는 서로 다른 플랫폼의 자체 API를 사용해서 Qt 컨트롤을 그리므로 최근의 Qt에는 적용되지 않는다. [[wxWidgets]] 같은 다른 플랫폼에 의존하는 함수를 사용하는 그래픽 툴킷들은 그 나름대로의 디자인을 가지고 있다.

=== 메타 오브젝트 컴파일러 ===
약칭 "moc" 로 알려져 있는 이 프로그램은 Qt에서 사용되고 있는 비표준적인 메타데이터들을 처리하기 위한 도구이다. 일례로 Qt에서 사용하고 있는 이벤트 처리방식인 시그널-슬롯 방식은 표준 C++ 처리방식이 아니다.

이러한 비표준적인 방식을 사용하는 것에 대해 기존의 C++ 사용자들의 비판이 일었다. 또한, 매크로를 기반으로 한 구현은 타입 안전성과 네임스페이스 오염을 유발할 수 있다고 한다.

하지만 이러한 비판에 트롤텍은 Qt의 첫 출시될 당시에는 템플릿 구현에 있어서 컴파일러 간에 차이가 있었을 뿐 아니라 시그널-슬롯의 동적생성 및 RTTI에 있어서 이러한 구조를 사용할 필요가 있다고 주장했다.

== 사용하는 곳 ==
Qt는 다음 프로그램 및 환경에서 사용된다.

=== Qt ===
* [[다음 클라우드]](Daum Cloud)
* [[KDE]]

=== Qtopia ===
* 샤프 [[자우루스]]
* i-Station T43 PMP
* 모토로라 E680/A780 휴대폰

그 밖의 정보는 [https://web.archive.org/web/20060615034114/http://www.trolltech.com/customers/casestories]를 참고하기 바란다.

== [[Hello World 프로그램]] ==
<syntaxhighlight lang="cpp">
#include <QtGui>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel label("Hello, world!");
    label.show();
    return app.exec();
}
</syntaxhighlight>

==텍스트 편집기==
QT 크리에이터(creator)에는 기본적으로 GCC 64bit c++과 cmake를 지원하는 안정된 텍스트 편집기(text editor) 클래스(class)를 오픈소스로 이미 구현하여 내장시켜 배포하고 있다. 이러한 가이드 방침에서 처음 QT를 시작하는 프로그래머들이 그들만의 GUI 텍스트 편집기(text editor)를 만들어 볼 수 있도록 샘플 소스코드 예제 또한 함께 제공하고 있다.<ref>[참고](Getting Started Programming with Qt Widgets-A tutorial for Qt Widgets based on a notepad application.)https://doc.qt.io/qt-5/qtwidgets-tutorials-notepad-example.html</ref><ref>[참고](QString Class-The QString class provides a Unicode character string)https://doc.qt.io/qt-5/qstring.html</ref><ref>(Qt공식사이트-Qt for Beginners/ko)https://wiki.qt.io/Qt_for_Beginners/ko?veaction=edit</ref>

== 같이 보기 ==
* [[GTK]]

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* {{언어링크|en}} {{공식 웹사이트}}

{{KDE}}
{{위젯 툴킷}}

{{전거 통제}}

[[분류:KDE]]
[[분류:X 윈도 시스템]]
[[분류:위젯 툴킷]]
[[분류:1992년 소프트웨어]]
[[분류:C++로 작성된 자유 소프트웨어]]
[[분류:LGPL 라이선스 소프트웨어]]
[[분류:자유 라이브러리]]
[[분류:Qt| ]]