Ne seçmeliyim: GTK + veya Qt? [kapalı]


89

Birisi bugün bu kütüphanelerin en iyi kullanım alanlarını önerebilir mi? Sadece GUI mi yoksa veritabanı, XML, ağ iletişimi, iş parçacığı vb. Desteği de var mı?

Onlar hakkında okuyordum ve onlardan birini öğrenmeye / kullanmaya başlamayı düşündüm.

En yaygın olanı nedir? Aralarındaki fark nedir? Neden birini diğerine tercih ettin?


20
Başlangıçta, tam GPL veya ticari olan Qt lisanslama modeli hakkında çok fazla tartışma vardı, GTK + ise LGPL idi (bu nedenle ikincisinin kapalı kaynak ürününüzle birlikte kullanılması daha kolaydı). Ama şimdi Qt, LGPL IIRC olarak da mevcut, bu yüzden artık birini veya diğerini seçmek için gerçek bir neden değil.
Roalt

3
En çok ilgili soruya da bakabilirsiniz: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt

4
Ve yine iyi bir soru stackoverflow'da kapandı. İyi bir entegre HTML widget'ına ihtiyacınız varsa, GTK'yı şimdi kullanmanız (QT 5.2 önemli ölçüde / kullanılamayan azaltılmış bir özellik kümesine geçtikten sonra) veya QT kullanmanız ve birçok şey, karmaşıklık ve ekleyen Chrome CEF'i yerleştirmeniz gerektiğini eklemek istiyorum. Uygulamanıza 20 MB.
Lothar

Yanıtlar:


96

Öncelikle Linux'u hedefliyor gibi göründüğünüz için, seçim çoğunlukla kullanmak istediğiniz programlama diline bağlıdır.

C kodluyorsanız, açıkça GTK +

C ++ ile kodlarsanız, Qt'ye gidin, aksi takdirde Gtkmm'ye (GTK + üzerinde bir C ++ sarıcı) ihtiyacınız olacaktır.

Python'da kodlarsanız , hem GTK + hem de Qt'nin dil için bağlantıları vardır: bkz. PyGtk , PyQt ve PySide (Nokia tarafından başlatılan).

Java ile kodlarsanız, Nokia Qt Jambi'yi ( Qt için Java bağlamaları) durdurduğu için Qt artık geçerli bir seçenek değildir .

Ayrıca Qt, senaryo QGraphicsScene API'si, Javascript Core (WebKit'i çalıştıran motor) üzerine kurulu komut dosyası oluşturma motoru, durum makinesi ve animasyonlar çerçevesi ve bildirimsel kullanıcı arayüzü ile ilgili olarak daha birinci sınıftır .

GTK +, onunla birlikte Clutter'ı kullanabilmenize rağmen bu kadar bir şey sunmuyor .

Özellikle veritabanına arıyorsanız, XML ve diş (GTK + sahiptir (GTK + bir XML alt kümesi için bir ayrıştırıcı vardır) GLib'in sonra Qt tüm bu sunacak özellikler) içinde QtSql , QtXml ve QtConcurrent .

Sonuç olarak, Qt'nin kesin bir seçim olduğunu söyleyebilirim. Ancak GTK + da çok yeteneklidir.

Sorunuz için kristal netliğinde bir cevap alacağınızdan emin değilim, bu da neden bazı insanların KDE yerine Gnome'u tercih ettiğini veya bunun tersini açıklıyor. Sizin için en uygun olanı seçin.

Not: Ben Symbian'ı da hedeflemeyi planlıyorsunuz, sonra Qt'ye gidin.

DÜZENLEME: Qt ile de harika olan bir şey QtWebView: Chromium'u, web içeriğini görüntülemek için Qt uygulamanıza getiriyor. Diğerleri, örneğin Awesomium veya Berkelium kullanarak uygulamalarına web içeriği yerleştiriyorlar.


QtScript'in, SquirrelFish Extreme sayesinde şu anda en hızlı JavaScript motoru olan JavaScriptCore tarafından desteklendiğini unutmayın.
CMircea

1
Düzenlemenizle ilgili olarak, GTK + için WebKitGtk + vardır. Biri diğerinden önemli ölçüde daha olgun olmadığı sürece, QtWebKit'in varlığının GTK + 'ya göre bir avantaj olduğunu düşünmüyorum.
Matthew

Ruby'de kod yazıyorsanız , QtRuby'yi arayın .
José Andias

5
gtkmmharika, GTK + 'nın tüm gücü ama modern tanımıyla gerçek C ++ kullanarak , gördüğüm en temiz, en okunabilir GUI kodunu üretiyor ... aslında, en katlanılabilir olanı , çünkü GUI programlamayı ilk öğrenmeye başladığımda, gtkmmyaşama irademi yeniden canlandıran şeyin temizliğiydi . Neyse ki, sebat işe yaradı ve son derece güçlü olduğunu öğrendim ve beni C ++ 14'e C ++ 03'ten daha fazla girmeye teşvik etti. Ayrıca, on yıldan fazla bir süredir AFAICT tarafından aynı ana bakıcı tarafından bakımlıdır. Ben vb sadece bir fan, hiçbir görüş, değilim
underscore_d

3
Oh ... Symbian günleri ...
daka

41

Daha önce GTK +, QT ve wxWidgets kullandım. İşte kısa bir özet:

İlk platformlar arası UI projem için wxWidgets'e gitmeye karar verdim çünkü o zamanlar lisans QT'ler kadar kısıtlayıcı değildi (QT GPL idi ve sadece Linux için) ve platforma özel kullanıcı arayüzüne sahipti (GTK'nın aksine). Proje iyi sonuç verdi, ancak diğer platformlarda düzgün bir şekilde derlenmesini ve çalıştırılmasını sağlayan epeyce aksaklık vardı - bazen bazı olaylar farklı şekilde tetikleniyordu. Ayrıca wxWidgets'daki GDI oldukça yavaştı.

Sonra GTK'yı python'da farklı bir proje için kullandım. Bunun için python bağlamalarını kullandım ve her şey az çok sorunsuz çalıştı. Kullanıcı arayüzünün Windows ve Mac'te yerel görünmemesinden pek hoşlanmadım ve ayrıca bir GTK + uygulamasını başlattığınızda her zaman hata ayıklama, göz ardı edilmesi iyi görünen birçok KRİTİK uyarı verir. : S

Son olarak, Nokia'nın satın aldığı ve mükemmel olduğu için çok basit bir QT projesi yaptım. Üçünün en iyisi. Öncelikle, VI veya Emacs'ı tercih eden yaşlı bir okul öğrencisi değilseniz, QtCreator harikadır. VI'yı çok seviyorum ve yıllarca kullandım ama C ++ QT projeleri için QtCreator'ı çok tercih ediyorum. Kütüphane ile ilgili olarak, sağlanan dokümantasyonu ve API'leri de çok beğendim. QT, yeni C ++ anahtar sözcüklerini ve bir önişlemciyi tanıtan yuvalar ve sinyaller kavramına sahiptir. Temel olarak, bir öğreticiyi okuduktan sonra onu kolayca anlayacak ve sevmeye başlayacaksınız. Şimdi iPhone geliştirme yapıyorum ve biraz Cocoa's / Interface Builder'ın UI paradigmasına benziyor.

Özet: QT eller aşağı giderdim. Lisans oldukça iyi ve SDK ve belgeler gerçekten güzel.


13
GTK + uygulamalarının farklı platformlarda aynı görünmesini olumlu buluyorum çünkü bu, kullanıcı arayüzlerimin her yerel araç setiyle kendilerini tam olarak doğru şekilde düzenlemesini sağlamak için fazladan haftalar harcamam gerekmediği anlamına geliyor. Ayrıca - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- hayır, yanlış bir şey yapmadığınız sürece, bu iyi değildir . Bir kez bile kendi hatalarımdan kaynaklanmayan ve doğru kodu kullanarak düzeltmesi çok kolay olmayan kritik bir uyarı görmedim. Ve olsun hiçbir hata ayıklama mesajları, hatta uyarıları
underscore_d

25

GTK'yı hiç kullanmadım, ancak Qt kullanımıyla ilgili kişisel deneyimlerime göre:

Basit bir GUI'den çok daha fazlasıdır. Tam bir uygulama çerçevesi. Bunu C ++ için Java kitaplıkları olarak düşünürdüm. Bahsettiğiniz her şeyi sağlar - veritabanı, XML, ağ iletişimi ve iş parçacığı ve daha fazlası. Ayrıca, kapsayıcılar ve yineleyiciler gibi şeyler ve bir dizi yükseltme kitaplığı için eşler sağlar.

Qt kullanmaya başlarken beni en çok etkileyen şey, son derece kapsamlı dokümantasyon oldu. Masaüstünüzde tamamen indekslenmiş ve aranabilir API dokümantasyonunun yanı sıra çok sayıda kod örneği ve öğretici sağlayan Qt Assistant adlı bir program alırsınız. API bilgisi için her seferinde web'de arama yapmanın büyük bir fark yarattığını fark ettim. Bir yöntem imzasını hatırlamanız gerektiğinde çok hızlı erişim.

Hangisinin en yaygın olduğundan emin değilim; muhtemelen doğru ölçmek zordur. İkisi de kesinlikle popüler. Gnome, Ubuntu'nun varsayılan masaüstü bilgisayarı olduğundan ve Gnome GTK'nın üstüne oturduğundan, açıkça yaygın bir kullanıma sahiptir. Tabii ki KDE de çok popüler. Nokia, mobil alanda Qt'yi yoğun bir şekilde zorluyor - örneğin yeni N900'de kullanılan Maemo OS'leri, yakında varsayılan araç seti olarak Qt'ye geçecek (şu anda GTK.) Qt'nin de yakında varsayılan araç takımı olacağına inanıyorum. Symbian OS için.

Qt Creator'ı kullanmadım ama bununla ilgili pek çok güzel şey duydum. Qt ile bariz yoğun entegrasyona sahip bir C ++ IDE'dir. Ayrıca, bu tür şeyleri severseniz her zaman güzel olan sahte vim öykünmesi vardır!

Qt, derleme yapılandırması için qmake kullanır. Bunu kendi makefilesinizi yazmaktan çok daha hoş buldum. GTK'nın bina için ne kullandığını bilmiyorum.

Qt ile ilk başta biraz çıktı bulduğum birkaç şey, önişlemci makrolarının büyük kullanımlarıydı. Sinyal / yuva sistemi, uygulamanızda olay / mesaj geçişi için güzel bir mekanizma sağlar, ancak isterseniz başka bir araç setine kolayca taşınamayacak sihir gibi hissettirir. Ayrıca, moc (meta-nesne derleyicisi), ne yaptığından tam olarak emin olmasam da, perde arkasında sihir gibi biraz fazla hissediyor.

Sonuç olarak, özellikle öğreniyorsanız, Qt'yi tavsiye ederim. Gerçekten harika belgelere ve güzel bir IDE'ye ve yoğun forumlara sahip. Özellikle 4.7'de gelen QML ile C ++ uygulamalarını çok hızlı bir şekilde geliştirebileceksiniz.


9

Muhtemelen ne yapmak istediğinize bağlıdır. Qt'yi tavsiye ederim, çünkü GUI'den daha fazlası, güzel Python bağlantıları var (Gtk de öyle) ve GUI kitaplıklarının kendileri (öznel olarak konuşursak) Gtk'den daha hoş.

Öte yandan Gtk, linux dünyasında daha yaygındır, bu nedenle muhtemelen web'den daha fazla yardım alabilirsiniz. Gtk'nin yaygınlaşmasının nedeni muhtemelen teknik değerlerden ziyade Gnome ve Ubuntu ile daha çok ilgilidir, ancak yazılımınızın bu ikisiyle güzel bir şekilde harmanlanmasını istiyorsanız, bunu Gtk ile daha kolay başaracaksınız.


7

Qt kesinlikle sağlam bir DB'ye, ağa, iş parçacığı desteğine vb. Sahiptir ... Platformlar arası GUI'den çok daha fazlasını yapar (ve çoğunu oldukça iyi yapar).

GTK + üzerinden tavsiye ederim.


3

Sadece diğer yanıtlara QT avantajları eklemek .. QT harika belgelere, kendi IDE ve GUI oluşturucusuna sahiptir ve yuvalar / sinyaller (temelde olaylar) gibi bazı yeni kavramlarla C ++ ' yı geliştirir.

Ben bir GTK geliştiricisi değilim, bu yüzden bunları GTK dünyasıyla karşılaştıramıyorum :(


11
Gtk için ayrıca bir GUI yaratıcısı Glade ( glade.gnome.org ) vardır.
davidbe

3

Qt. Sadece nesne yönelimli değil, "iyi" nesne yönelimli. C ++ 'ın belirsizliğine dayanmayan bir C ++ "alt kümesine" dayanır (ancak mazoşizmden hoşlanıyorsanız, bunlara bağlı kalmanıza izin verilir;)).

Şimdi Nokia onu satın aldığında güçlü bir ivmeye sahip (aslında Nokia bunu ~ 2/3 yıl önce yaptı). Tüm Nokia VE Intel mobil cihazlarında (akıllı telefonlar, netbook'lar, tabletler) olacak.

Bu, KDE'nin bel kemiği, bu yüzden çok olgun, ancak çok esnek bir şekilde tasarlandı, bu da TODAY, daha sonra sadece bir GUI çerçevesinin sahip olması gereken en yeni "harika şeyleri" desteklemeyi mümkün kılıyor .

Göreyim seni.


5
Alt küme? Daha çok süperset gibi, qmake ve moc göz önüne alındığında.
rr-

1

Görünüşe göre Nokia, Maemo'da olduğu gibi Qt'yi her yerde kullanmak üzere


1

Uygulamanızın iOS, Android, Blackberry, diğer mobil platformlar, Windows, Mac OSX ve Linux'ta çalışmasını istiyorsanız, Qt kullanın.

qt-project.org

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.