Co mam wybrać: GTK + czy Qt? [Zamknięte]


89

Czy ktoś może zasugerować, jakie są obecnie najlepsze zastosowania tych bibliotek? Czy to tylko GUI, czy też obsługują bazy danych, XML, obsługę sieci, wątki itp.?

Czytałem o nich i rozważałem rozpoczęcie nauki / wykorzystania jednego z nich.

Jaki jest najczęstszy? Jaka jest między nimi różnica? Dlaczego miałbyś wybrać jedną z nich?


20
Początkowo było wiele kontrowersji co do modelu licencjonowania Qt, który był albo na pełnej GPL, albo komercyjny, podczas gdy GTK + to LGPL (więc ten ostatni był łatwiejszy w użyciu w połączeniu z twoim produktem zamkniętym). Ale teraz Qt jest również dostępny jako LGPL IIRC, więc nie jest to już prawdziwy powód, aby wybrać jeden lub drugi.
Roalt

3
Możesz również spojrzeć na to głównie powiązane pytanie: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt

4
I znowu dobre pytanie zakończyło się przepełnieniem stosu. Chcę dodać, że jeśli potrzebujesz dobrego zintegrowanego widżetu HTML, musisz teraz użyć GTK (po przeniesieniu QT 5.2 do dramatycznie / nieużywalnego zestawu zredukowanych funkcji) lub użyć QT i osadzić Chrome CEF, który dodaje wiele rzeczy, komplikacji i 20 MB do Twojej aplikacji.
Lothar

Odpowiedzi:


95

Ponieważ wydaje się, że Twoim celem jest przede wszystkim Linux, wybór zależy głównie od języka programowania, którego chcesz użyć.

Jeśli kodujesz w C, to oczywiście wybierz GTK +

Jeśli programujesz w C ++, przejdź do Qt, w przeciwnym razie będziesz potrzebować Gtkmm (opakowanie C ++ zamiast GTK +)

Jeśli programujesz w Pythonie, zarówno GTK +, jak i Qt mają powiązania dla języka: zobacz PyGtk , PyQt i PySide (ten uruchomiony przez samą Nokię).

Jeśli programujesz w Javie, Qt nie jest już realną opcją imho, ponieważ Nokia zaprzestała Qt Jambi (powiązania Java dla Qt).

Ponadto Qt jest bardziej zaawansowany, jeśli chodzi o jego scenegraph QGraphicsScene API, jego silnik skryptowy zbudowany na Javascript Core (silnik napędzający WebKit), jego maszynę stanów i strukturę animacji oraz deklaratywny interfejs użytkownika .

GTK + nie oferuje tak wiele, chociaż możesz używać razem z nim Clutter .

Jeśli patrzysz konkretnie na DB, XML (GTK + ma parser dla podzbioru XML) i wątki (GTK + ma GLib ), Qt zaoferuje to wszystko w QtSql , QtXml i QtConcurrent .

Podsumowując, powiedziałbym, że Qt to pewny wybór. Ale GTK + jest również bardzo zdolny.

Nie jestem pewien, czy otrzymasz krystalicznie czystą odpowiedź na swoje pytanie, co wyjaśnia, dlaczego niektórzy ludzie wolą Gnome od KDE lub odwrotnie. Wybierz to, co najbardziej Ci odpowiada.

PS: Planujesz obrać za cel również Symbiana, a następnie przejdź do Qt.

EDYCJA: Coś, co jest również świetne w Qt, to QtWebView: wprowadza Chromium do aplikacji Qt w celu wyświetlania treści internetowych. Inni osadzają treści internetowe w swoich aplikacjach przy użyciu na przykład Awesomium lub Berkelium.


Nie zapominaj, że QtScript jest oparty na JavaScriptCore, który jest obecnie najszybszym silnikiem JavaScript dzięki SquirrelFish Extreme.
CMircea

1
Jeśli chodzi o twoją edycję, jest WebKitGtk + dla GTK +. O ile jeden nie jest znacznie bardziej dojrzały od drugiego, nie sądzę, aby istnienie QtWebKit kwalifikowało się jako przewaga nad GTK +.
Matthew

Jeśli kodujesz w Rubim, poszukaj QtRuby .
José Andias

5
gtkmmjest świetny, cała moc GTK +, ale używając rzeczywistego C ++ według współczesnej definicji, tworząc najczystszy, najbardziej czytelny kod GUI, jaki widziałem ... właściwie najbardziej znośny , ponieważ kiedy po raz pierwszy zacząłem uczyć się programowania GUI, to właśnie schludność gtkmmprzywróciła mi wolę życia. Na szczęście wytrwałość opłaciła się i odkryłem, że jest niezwykle potężna i zachęciła mnie do bardziej zaawansowanego podejścia do C ++ 14 niż C ++ 03. Ponadto jest dobrze utrzymany przez tego samego głównego opiekuna od ponad dekady AFAICT. Jestem tylko fanem, bez przynależności itp.
podkreślenie_d

3
Och ... dni Symbian ...
daka

42

Wcześniej korzystałem z GTK +, QT i wxWidgets. Oto krótkie podsumowanie:

W moim pierwszym wieloplatformowym projekcie UI zdecydowałem się na wxWidgets głównie dlatego, że w tamtym czasie licencja nie była tak restrykcyjna jak QT (QT była GPL i tylko dla Linuksa) i miała interfejs specyficzny dla platformy (w przeciwieństwie do GTK). Projekt działał dobrze, ale było sporo błędów, które spowodowały, że kompilował się i działał poprawnie na innych platformach - czasami niektóre zdarzenia były uruchamiane inaczej i takie. Również GDI w wxWidgets działało dość wolno.

Następnie użyłem GTK do innego projektu w Pythonie. W tym celu użyłem powiązań Pythona i wszystko poszło mniej lub bardziej gładko. Nie podobał mi się fakt, że interfejs użytkownika nie wyglądał natywnie w systemach Windows i Mac, a także po uruchomieniu aplikacji GTK + zawsze debuguje mnóstwo ostrzeżeń KRYTYCZNYCH, które można zignorować. : S

Wreszcie zrobiłem bardzo prosty projekt QT teraz, gdy Nokia go nabyła i był genialny. Najlepsze z trzech. Po pierwsze, jeśli nie jesteś oldschoolem, który preferuje VI lub Emacsa, QtCreator jest genialny. Naprawdę kocham VI i używam go od lat, ale zdecydowanie wolę QtCreator do projektów C ++ QT. Jeśli chodzi o bibliotekę, bardzo podobała mi się również dokumentacja i dostarczone interfejsy API. QT ma koncepcję slotów i sygnałów, które wprowadzają nowe słowa kluczowe C ++ i preprocesor. Zasadniczo po przeczytaniu samouczka łatwo go zdobędziesz i zaczniesz go kochać. Teraz zajmuję się programowaniem iPhone'a i wydaje mi się, że jest to trochę jak paradygmat interfejsu użytkownika Cocoa / Interface Builder.

Podsumowanie: Zrobiłbym QT bez wysiłku. Licencja jest całkiem dobra, a SDK i dokumentacja naprawdę fajna.


13
Uważam za pozytywne, że aplikacje GTK + wyglądają tak samo na różnych platformach, ponieważ oznacza to, że nie muszę spędzać dodatkowych tygodni na zastanawianiu się, jak sprawić, by moje interfejsy użytkownika były dokładnie dopasowane do każdego natywnego zestawu narzędzi. Ponadto - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- nie, nie działa, chyba że robisz coś źle, co nie jest w porządku. Nigdy nie widziałem krytycznego ostrzeżenia, które nie wynikałoby z moich własnych błędów i nie było łatwe do naprawienia przy użyciu poprawnego kodu. I nie dostaję żadnych komunikatów debugowania, ani nawet ostrzeżeń
podkreślenie_d

25

Nigdy nie używałem GTK, ale z mojego osobistego doświadczenia przy korzystaniu z Qt:

To znacznie więcej niż prosty interfejs graficzny. To cały framework aplikacji. Kiedyś myślałem o tym jako o bibliotekach Java dla C ++. Zapewnia wszystko, o czym wspomniałeś - bazę danych, XML, sieci i wątki i nie tylko. Zapewnia również takie elementy, jak kontenery i iteratory oraz odpowiedniki wielu bibliotek przyspieszenia.

To, co zrobiło na mnie największe wrażenie, gdy zacząłem używać Qt, to niezwykle obszerna dokumentacja. Otrzymujesz program o nazwie Qt Assistant, który zapewnia w pełni zindeksowaną i przeszukiwalną dokumentację API na twoim pulpicie, a także liczne przykłady kodu i samouczki. Zauważyłem, że za każdym razem przeszukuję sieć w poszukiwaniu informacji o API. Bardzo szybki dostęp, gdy trzeba zapamiętać sygnaturę metody.

Nie jestem pewien, który z nich występuje najczęściej; to prawdopodobnie trudne do dokładnego zmierzenia. Z pewnością obie są popularne. Ponieważ Gnome jest domyślnym pulpitem Ubuntu, a Gnome znajduje się na szczycie GTK, ma oczywiście szerokie zastosowanie. Oczywiście KDE jest również bardzo popularne. Nokia mocno naciska na Qt w przestrzeni mobilnej - ich Maemo OS, używany na przykład w nowym N900, wkrótce przejdzie na Qt jako domyślny zestaw narzędzi (obecnie jest to GTK). Wierzę, że Qt również wkrótce stanie się domyślnym zestawem narzędzi dla systemu Symbian OS.

Nie używałem programu Qt Creator, ale słyszałem o nim wiele dobrych rzeczy. Jest to C ++ IDE z oczywistą ciężką integracją z Qt. Posiada również emulację fałszywego vima, co jest zawsze fajne, jeśli lubisz takie rzeczy!

Qt używa qmake do konfiguracji kompilacji. Okazało się, że to o wiele przyjemniejsze niż pisanie własnych plików makefile. Nie wiem, czego używa GTK do budowy.

Kilka rzeczy, które na początku wydawały mi się nieco zniechęcające w przypadku Qt, to duże zastosowania makr preprocesora. System sygnałów / gniazd zapewnia niezły mechanizm przekazywania zdarzeń / wiadomości w aplikacji, ale wydaje się trochę jak magia, której nie można łatwo przenieść do innego zestawu narzędzi, jeśli kiedykolwiek zechcesz. Ponadto moc (kompilator meta-obiektów), chociaż nie jestem do końca pewien, co robi, również wydaje się trochę zbyt podobny do magii, która dzieje się za kulisami.

Podsumowując, polecam Qt, szczególnie jeśli się uczysz. Ma naprawdę niesamowitą dokumentację, fajne IDE i ruchliwe fora. Będziesz mógł bardzo szybko tworzyć aplikacje C ++, szczególnie w QML w wersji 4.7.


9

To prawdopodobnie zależy od tego, co chcesz robić. Poleciłbym Qt, ponieważ to coś więcej niż GUI, ma ładne powiązania z Pythonem (tak samo jak Gtk), a same biblioteki GUI są (subiektywnie) przyjemniejsze niż Gtk.

Z drugiej strony Gtk jest bardziej powszechny w świecie Linuksa, więc prawdopodobnie możesz uzyskać więcej pomocy w sieci. Powód rozpowszechnienia Gtk prawdopodobnie ma więcej wspólnego z Gnome i Ubuntu, niż z zaletami technicznymi, ale jeśli chcesz, aby oprogramowanie ładnie łączyło się z tymi dwoma, łatwiej to osiągniesz dzięki Gtk.


7

Qt z pewnością ma solidną bazę danych, obsługę sieci, obsługi wątków itp ... Robi dużo więcej niż tylko wieloplatformowe GUI (i większość z tego robi całkiem dobrze).

Poleciłbym to zamiast GTK +.


3

Po prostu dodając zalety QT do innych odpowiedzi. QT ma świetną dokumentację, własny kreator IDE i GUI oraz rozszerza C ++ o kilka nowych koncepcji, takich jak sloty / sygnały (w zasadzie zdarzenia).

Nie jestem programistą GTK, więc nie mogę ich porównywać ze światem GTK :(


11
Dla Gtk istnieje również kreator GUI Glade ( glade.gnome.org ).
davidbe

3

Qt. Jest nie tylko zorientowany obiektowo, jest „dobry” obiektowo. Opiera się na „podzbiorze” C ++, który nie opiera się na niejasności C ++ (ale możesz się ich trzymać, jeśli masz ochotę na masochizm;)).

Odkąd Nokia go kupiła, zyskała na popularności (właściwie Nokia zrobiła to ~ 2/3 lata temu). Będzie na wszystkich urządzeniach mobilnych Nokia i Intel (smartfony, netbooki, tablety).

Jest to kręgosłup KDE, więc jest bardzo dojrzały, ale został zaprojektowany w bardzo elastyczny sposób, który umożliwia DZISIAJ obsługę wszystkich najnowszych "fajnych rzeczy", które powinien mieć framework, który nie tylko jest tylko GUI .

Idź po to.


5
Podzbiór? Raczej superset, biorąc pod uwagę qmake i moc.
rr-

1

Wygląda też na to, że Nokia będzie używać Qt wszędzie, jak na Maemo


1

Jeśli chcesz, aby Twoja aplikacja działała na iOS, Androidzie, Blackberry, innych platformach mobilnych, Windows, Mac OSX i Linux, użyj Qt.

qt-project.org

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.