무엇을 선택해야합니까 : GTK + 또는 Qt? [닫은]


89

누군가가 오늘날 이러한 도서관에 가장 적합한 용도를 제안 할 수 있습니까? GUI 일 뿐입니 까, 아니면 데이터베이스, XML, 네트워킹, 스레딩 등도 지원합니까?

나는 그들에 대해 읽고 있었고 그들 중 하나를 배우고 사용하기 시작했습니다.

가장 흔한 것은 무엇입니까? 그들 사이의 차이점은 무엇입니까? 왜 다른 하나를 선택하겠습니까?


20
원래 풀 GPL 또는 상용 인 Qt 라이선싱 모델에 대해 많은 논란이 있었지만 GTK +는 LGPL이었습니다 (따라서 후자는 폐쇄 소스 제품과 함께 사용하는 것이 더 쉬웠습니다). 그러나 이제 Qt는 LGPL IIRC로도 제공되므로 더 이상 둘 중 하나를 선택해야하는 실제 이유가 아닙니다.
Roalt 2009

3
당신은 또한이 대부분의 관련 질문을 볼 수 있습니다 : stackoverflow.com/questions/1801074/…
Caleb Huitt-cjhuitt 2009

4
그리고 다시 한 번 좋은 질문이 stackoverflow에 대해 닫혔습니다. 좋은 통합 HTML 위젯이 필요한 경우 지금 GTK를 사용하거나 (QT 5.2가 극적으로 / 사용할 수없는 감소 된 기능 세트로 이동 한 후) QT를 사용하고 많은 것들을 추가하고있는 Chrome CEF를 포함해야한다고 덧붙이고 싶습니다. 앱에 20MB.
Lothar

답변:


94

주로 Linux를 대상으로하는 것처럼 보이므로 선택은 주로 사용하려는 프로그래밍 언어에 따라 다릅니다.

C로 코딩한다면 당연히 GTK +로 가세요

C ++로 코딩하는 경우 Qt로 이동하십시오. 그렇지 않으면 Gtkmm (GTK +에 대한 C ++ 래퍼)가 필요합니다.

Python으로 코딩하는 경우 GTK +와 Qt 모두 언어에 대한 바인딩이 있습니다. PyGtk , PyQtPySide (Nokia 자체에서 시작한 것)를 참조하세요.

Java로 코딩하는 경우 Nokia가 Qt Jambi ( Qt에 대한 Java 바인딩)를 중단 했으므로 Qt는 더 이상 실행 가능한 옵션이 아닙니다 .

또한 Qt는 장면 그래프 QGraphicsScene API, Javascript Core (WebKit을 지원하는 엔진)를 기반으로 구축 된 스크립팅 엔진, 상태 시스템 및 애니메이션 프레임 워크, 선언적 UI 와 관련하여 더 최고 입니다 .

GTK +는 Clutter 와 함께 사용할 수 있지만 그렇게 많이 제공하지 않습니다 .

특별히 DB, XML (GTK +에는 XML의 하위 집합에 대한 파서가 있음) 및 스레딩 (GTK +에는 GLib이 있음 ) 기능을 살펴보고 있다면 Qt는 QtSql , QtXmlQtConcurrent 에서 모든 기능을 제공합니다 .

대체로 Qt가 확실한 선택이라고 말하고 싶습니다. 그러나 GTK +도 매우 유능합니다.

질문에 대한 명확한 답을 얻을 수 있을지 모르겠습니다.이 때문에 일부 사람들이 KDE보다 Gnome을 계속 선호하거나 그 반대의 경우도 마찬가지입니다. 자신에게 가장 적합한 것을 선택하십시오.

PS : Symbian도 목표로 삼고 Qt로 갈 계획입니다.

편집 : Qt와 함께 좋은 QtWebView점은 웹 콘텐츠를 표시하기 위해 Chromium을 Qt 응용 프로그램에 가져옵니다. 다른 사람들은 예를 들어 Awesomium 또는 Berkelium을 사용하여 웹 콘텐츠를 애플리케이션에 포함하고 있습니다.


QtScript는 SquirrelFish Extreme 덕분에 현재 가장 빠른 JavaScript 엔진 인 JavaScriptCore로 구동된다는 사실을 잊지 마십시오.
CMircea 2010

1
편집과 관련하여 GTK + 용 WebKitGtk +가 있습니다. 하나가 다른 것보다 훨씬 더 성숙하지 않는 한, QtWebKit의 존재가 GTK +보다 유리하다고 생각하지 않습니다.
Matthew

Ruby로 코딩하는 경우 QtRuby찾으십시오 .
José Andias 2014-12-05

5
gtkmmGTK +의 모든 힘은 훌륭하지만 현대적인 정의에 따라 실제 C ++를 사용하여 내가 본 것 중 가장 깨끗하고 가장 읽기 쉬운 GUI 코드를 생성합니다. 실제로 가장 견딜 수있는 . gtkmm내 삶의 의지를 회복 시킨 것은 깔끔함이었습니다 . 고맙게도 인내심이 결실을 맺었고 이것이 매우 강력하다는 것을 알게되었고 C ++ 03보다 C ++ 14에 더 많은 관심을 갖게되었습니다. 또한 10 년 이상 AFAICT 동안 동일한 기본 유지 관리자가 잘 관리하고 있습니다. 나는 등 단지 팬, 아니 제휴 해요
underscore_d

3
오 ... 심비안 시대 ...
daka

41

이전에 GTK +, QT 및 wxWidgets를 사용했습니다. 다음은 간략한 요약입니다.

첫 번째 크로스 플랫폼 UI 프로젝트에서는 주로 라이센스가 QT만큼 제한적이지 않았고 (QT는 GPL이고 Linux에만 해당) 플랫폼 별 UI (GTK와 달리)가 있었기 때문에 주로 wxWidgets를 사용하기로 결정했습니다. 프로젝트는 잘 진행되었지만 다른 플랫폼에서 제대로 컴파일하고 실행하는 데에는 몇 가지 결함이있었습니다. 때로는 일부 이벤트가 다르게 실행되는 등의 문제가있었습니다. 또한 wxWidgets의 GDI는 꽤 느 렸습니다.

다음으로 파이썬에서 다른 프로젝트에 GTK를 사용했습니다. 이를 위해 나는 파이썬 바인딩을 사용했고 모든 것이 다소 부드럽게 작동했습니다. UI가 Windows와 Mac에서 기본적으로 보이지 않는다는 사실이 마음에 들지 않았고 GTK + 앱을 시작할 때 항상 무시해도되는 CRITICAL 경고 출력을 디버그합니다. :에스

마지막으로, 나는 Nokia가 그것을 인수하고 훌륭해 졌으므로 이제 매우 간단한 QT 프로젝트를 수행했습니다. 세 가지 중 최고입니다. 우선, VI 또는 Emacs를 선호하는 고등학생이 아니라면 QtCreator는 훌륭합니다. 저는 VI를 정말 좋아하고 수년 동안 사용했지만 C ++ QT 프로젝트에는 QtCreator를 훨씬 선호합니다. 라이브러리와 관련하여 나는 또한 제공된 문서와 API를 많이 좋아했습니다. QT에는 새로운 C ++ 키워드와 전처리기를 도입하는 슬롯 및 신호 개념이 있습니다. 기본적으로 튜토리얼을 읽은 후에는 쉽게 얻을 수 있고 사랑하기 시작할 것입니다. 저는 지금 iPhone 개발을하고 있으며 Cocoa / Interface Builder의 UI 패러다임과 약간 비슷합니다.

요약 : QT를 손에 넣겠습니다. 라이센스는 꽤 좋고 SDK와 문서는 정말 좋습니다.


13
GTK + 애플리케이션이 서로 다른 플랫폼에서 동일하게 보인다는 점은 긍정적이라고 생각합니다. 즉, UI를 각 기본 툴킷에 정확히 맞추는 방법을 알아내는 데 추가로 몇 주를 소비 할 필요가 없음을 의미합니다. 또한-- when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S아니, 당신이 뭔가 잘못하고 있지 않는 한 그것은 좋지 않습니다 . 나는 한 번도 내 자신의 oops에서 비롯되지 않고 올바른 코드를 사용하여 수정하기가 매우 쉽지 않은 중요한 경고를 본 적이 없습니다. 그리고 내가 얻을 에는 디버그 메시지, 심지어 경고
underscore_d

25

GTK를 사용한 적이 없지만 Qt를 사용한 개인적인 경험에서 :

단순한 GUI 그 이상입니다. 전체 애플리케이션 프레임 워크입니다. 저는 그것을 C ++ 용 자바 라이브러리라고 생각했습니다. 데이터베이스, XML, 네트워킹 및 스레딩 등 언급 된 모든 것을 제공합니다. 또한 컨테이너 및 반복기와 같은 것을 제공하고 여러 부스트 라이브러리에 대응합니다.

Qt를 사용하기 시작할 때 가장 인상적인 것은 매우 방대한 문서였습니다. 데스크톱에서 완전히 색인되고 검색 가능한 API 문서와 수많은 코드 예제 및 자습서를 제공하는 Qt Assistant라는 프로그램이 제공됩니다. API 정보를 찾을 때마다 웹을 검색하는 데 큰 차이가 있다는 것을 알았습니다. 메서드 서명을 기억해야 할 때 매우 빠르게 액세스 할 수 있습니다.

어떤 것이 가장 흔한 지 잘 모르겠습니다. 정확하게 측정하기는 어려울 것입니다. 둘 다 확실히 인기가 있습니다. Gnome은 Ubuntu의 기본 데스크탑이고 Gnome은 GTK 위에 위치하므로 분명히 널리 사용됩니다. 물론 KDE도 매우 인기가 있습니다. Nokia는 모바일 공간에서 Qt를 강력하게 추진하고 있습니다. 예를 들어 새로운 N900에서 사용되는 Maemo OS는 곧 기본 툴킷 (현재 GTK)으로 Qt로 전환 될 예정입니다. Qt도 곧 기본 툴킷이 될 것이라고 생각합니다. Symbian OS 용.

Qt Creator를 사용 해본 적은 없지만 좋은 점을 많이 들었습니다. Qt와 명백히 통합 된 C ++ IDE입니다. 그것은 또한 당신이 그런 종류의 것을 좋아한다면 항상 좋은 가짜 vim 에뮬레이션을 가지고 있습니다!

Qt는 빌드 구성을 위해 qmake를 사용합니다. 직접 메이크 파일을 작성하는 것보다 훨씬 좋다는 것을 알았습니다. GTK가 건물에 무엇을 사용하는지 모르겠습니다.

내가 처음에 Qt에서 약간 문제가되는 것을 발견 한 몇 가지는 전 처리기 매크로를 많이 사용한다는 것입니다. 신호 / 슬롯 시스템은 애플리케이션에서 이벤트 / 메시지 전달을위한 멋진 메커니즘을 제공하지만, 원하는 경우 다른 툴킷으로 쉽게 이식 할 수없는 마법처럼 느껴집니다. 또한 moc (메타 오브젝트 컴파일러)는 그것이 무엇을하는지 완전히 확신하지 못하지만, 뒤에서 일어나는 마법과도 너무 흡사합니다.

그러나 전반적으로 Qt를 권장합니다. 특히 배우는 경우 특히 그렇습니다. 정말 놀라운 문서와 멋진 IDE, 바쁜 포럼이 있습니다. 특히 4.7에서 제공되는 QML을 사용하여 C ++ 앱을 매우 빠르게 빌드 할 수 있습니다.


9

아마도 당신이 무엇을하고 싶은지에 달려 있습니다. 나는 Qt를 추천 할 것이다. 왜냐하면 그것이 GUI 이상이고, 좋은 파이썬 바인딩을 가지고 있고 (Gtk도 그렇다), GUI 라이브러리 자체가 (주관적으로 말하면) Gtk보다 더 즐겁다.

반면에 Gtk는 리눅스 세계에서 더 일반적이므로 웹에서 더 많은 도움을 얻을 수 있습니다. Gtk가 널리 보급 된 이유는 기술적 인 장점보다는 Gnome 및 Ubuntu와 더 관련이있을 수 있지만 소프트웨어가이 둘과 잘 어울리도록하려면 Gtk를 사용하면 더 쉽게 얻을 수 있습니다.


7

Qt는 확고한 DB, 네트워크, 스레딩 지원 등을 제공합니다. 크로스 플랫폼 GUI보다 훨씬 더 많은 기능을 수행합니다 (대부분의 작업을 잘 수행합니다).

GTK +보다 추천합니다.


3

다른 답변에 QT 이점을 추가하기 만하면됩니다. QT에는 훌륭한 문서, 자체 IDE 및 GUI 생성기가 있으며 슬롯 / 신호 (기본적으로 이벤트)와 같은 몇 가지 새로운 개념으로 C ++를 향상시킵니다.

저는 GTK 개발자가 아니므로 GTK 세계와 비교할 수 없습니다.


11
Gtk의 경우 GUI 작성자 Glade ( glade.gnome.org )도 있습니다.
davidbe 2009

3

Qt. 그것은 객체 지향적 일뿐만 아니라 "좋은"객체 지향적입니다. 이것은 C ++의 모호성에 의존하지 않는 C ++의 "하위 집합"을 기반으로합니다 (하지만 마조히즘을 좋아한다면 그것들을 고수 할 수 있습니다;)).

노키아가 인수 한 지금은 강력한 추진력을 가지고 있습니다 (실제로 노키아는 ~ 2 / 3 년 전에 했음). 모든 Nokia 및 Intel 모바일 장치 (스마트 폰, 넷북, 태블릿)에 포함될 것입니다.

KDE의 중추이므로 매우 성숙했지만 매우 유연한 방식으로 설계 되었기 때문에 오늘날 GUI 프레임 워크가 가져야 하는 모든 최신 "멋진 기능"을 지원할 수 있습니다.

그것을 위해 가십시오.


5
부분 집합? qmake와 moc를 고려하면 수퍼 세트와 더 비슷합니다.
rr-

1

노키아가 Maemo처럼 어디서나 Qt를 사용하려고하는 것 같습니다.


1

앱을 iOS, Android, Blackberry, 기타 모바일 플랫폼, Windows, Mac OSX 및 Linux에서 실행하려면 Qt를 사용하십시오.

qt-project.org

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.