Apa yang harus saya pilih: GTK + atau Qt? [Tutup]

89

Adakah yang bisa menyarankan apa kegunaan terbaik untuk perpustakaan itu hari ini? Apakah hanya GUI, atau apakah mereka memiliki dukungan database, XML, jaringan, threading, dll?

Saya membaca tentang mereka, dan mempertimbangkan untuk mulai mempelajari / menggunakan salah satunya.

Apa yang paling umum? Apa perbedaan diantara mereka? Mengapa Anda memilih salah satu dari yang lain?

Idan
sumber
20
Awalnya, ada banyak kontroversi tentang model lisensi Qt yang merupakan GPL penuh atau komersial, sedangkan GTK + adalah LGPL (jadi yang terakhir lebih mudah digunakan dalam kombinasi dengan produk sumber tertutup Anda). Tetapi sekarang Qt juga tersedia sebagai LGPL IIRC, jadi itu bukan alasan nyata lagi untuk memilih satu atau lain.
Roalt
3
Anda mungkin juga melihat pertanyaan yang sebagian besar terkait ini: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt
4
Dan lagi pertanyaan bagus ditutup pada stackoverflow. Saya ingin menambahkan bahwa jika Anda memerlukan widget HTML terintegrasi yang baik, Anda harus menggunakan GTK sekarang (setelah QT 5.2 pindah ke set fitur yang dikurangi secara dramatis / tidak dapat digunakan) atau gunakan QT dan embed Chrome CEF yang menambahkan banyak hal, komplikasi dan 20MB ke aplikasi Anda.
Lothar

Jawaban:

95

Karena Anda tampaknya terutama menargetkan Linux, pilihannya sebagian besar bergantung pada bahasa pemrograman yang ingin Anda gunakan.

Jika Anda membuat kode dalam C, maka jelas gunakan GTK +

Jika Anda membuat kode dalam C ++, pilih Qt, jika tidak, Anda akan memerlukan Gtkmm (pembungkus C ++ di atas GTK +)

Jika Anda membuat kode dengan Python, GTK + dan Qt memiliki binding untuk bahasa tersebut: lihat PyGtk , PyQt , dan PySide (yang diluncurkan oleh Nokia sendiri).

Jika Anda membuat kode di Java, Qt tidak lagi menjadi pilihan yang layak karena Nokia menghentikan Qt Jambi (pengikatan Java untuk Qt).

Selain itu, Qt lebih unggul dalam hal API QGraphicsScene scenegraph , mesin skrip yang dibangun di atas Javascript Core (mesin yang menjalankan WebKit), mesin status dan kerangka animasinya, dan UI deklaratif .

GTK + tidak menawarkan banyak hal meskipun Anda dapat menggunakan Clutter bersamanya.

Jika Anda secara khusus mencari fitur DB, XML (GTK + memiliki parser untuk subset XML) dan fitur threading (GTK + memiliki GLib ), maka Qt akan menawarkan semua itu di QtSql , QtXml dan QtConcurrent .

Secara keseluruhan, saya akan mengatakan Qt adalah pilihan yang pasti. Tapi GTK + juga sangat mumpuni.

Saya tidak yakin Anda akan mendapatkan jawaban yang sangat jelas untuk pertanyaan Anda, yang menjelaskan mengapa beberapa orang tetap lebih memilih Gnome daripada KDE atau sebaliknya. Pilih yang terbaik untuk Anda.

PS: Saya Anda berencana untuk juga menargetkan Symbian, lalu pilih Qt.

EDIT: Sesuatu yang juga hebat dengan Qt adalah QtWebView: membawa Chromium ke aplikasi Qt Anda untuk menampilkan konten web. Yang lain menyematkan konten web ke dalam aplikasi mereka menggunakan misalnya Awesomium atau Berkelium.

Gregory Pakosz
sumber
Jangan lupa bahwa QtScript didukung oleh JavaScriptCore, yang saat ini merupakan mesin JavaScript tercepat berkat SquirrelFish Extreme.
CMircea
1
Mengenai pengeditan Anda, ada WebKitGtk + untuk GTK +. Kecuali jika yang satu secara substansial lebih dewasa dari yang lain, saya rasa keberadaan QtWebKit tidak memenuhi syarat sebagai keunggulan dibandingkan GTK +.
Matius
Jika Anda membuat kode di Ruby, cari QtRuby .
José Andias
5
gtkmmhebat, semua kekuatan GTK + tetapi menggunakan C ++ aktual menurut definisi modern, menghasilkan kode GUI yang paling bersih dan paling mudah dibaca yang pernah saya lihat ... sebenarnya, hanya yang paling dapat diterima , karena ketika saya pertama kali mulai mencoba mempelajari pemrograman GUI, kerapian gtkmmitulah yang memulihkan keinginan saya untuk hidup. Syukurlah, ketekunan terbayar, dan saya menemukan bahwa itu sangat kuat, dan itu mendorong saya untuk lebih memahami C ++ 14 daripada C ++ 03. Juga, itu dipelihara dengan baik, oleh pengelola utama yang sama selama lebih dari satu dekade AFAICT. Saya hanya seorang penggemar, tidak ada afiliasi, dll.
underscore_d
3
Oh ... hari-hari Symbian ...
daka
42

Saya telah menggunakan GTK +, QT dan wxWidgets sebelumnya. Berikut ringkasan singkatnya:

Untuk proyek UI lintas platform pertama saya, saya memutuskan untuk menggunakan wxWidgets terutama karena pada saat itu lisensinya tidak seketat QT (QT adalah GPL dan hanya untuk Linux) dan memiliki UI khusus platform (tidak seperti GTK). Proyek ini bekerja dengan baik tetapi ada beberapa gangguan yang membuatnya dapat dikompilasi dan berjalan dengan baik di platform lain - terkadang beberapa acara dijalankan secara berbeda dan semacamnya. Juga GDI di wxWidgets cukup lambat.

Selanjutnya saya menggunakan GTK untuk proyek yang berbeda dengan python. Untuk ini saya menggunakan bindings python dan semuanya bekerja lebih atau kurang lancar. Saya tidak begitu menyukai kenyataan bahwa UI tidak terlihat asli pada Windows dan Mac dan juga ketika Anda meluncurkan aplikasi GTK + itu selalu men-debug output banyak peringatan KRITIS yang tampaknya baik-baik saja untuk diabaikan. : S

Akhirnya, saya melakukan proyek QT yang sangat sederhana sekarang karena Nokia telah mendapatkannya dan sangat brilian. Yang terbaik dari ketiganya. Pertama, jika Anda bukan anak sekolah tua yang lebih memilih VI atau Emacs, QtCreator sangat brilian. Saya sangat menyukai VI dan menggunakannya selama bertahun-tahun tetapi saya lebih memilih QtCreator untuk proyek C ++ QT. Mengenai perpustakaan, saya juga menyukai banyak dokumentasi dan API yang disediakan. QT memiliki konsep slot dan sinyal yang memperkenalkan kata kunci C ++ dan preprocessor baru. Pada dasarnya, setelah membaca tutorial, Anda akan mendapatkannya dengan mudah dan akan mulai menyukainya. Saya sekarang melakukan iPhone dev dan ini memang terasa seperti paradigma UI Cocoa / Interface Builder.

Ringkasan: Saya akan memilih QT. Lisensi cukup bagus dan SDK serta dokumentasinya sangat bagus.

rui
sumber
13
Saya menganggap positif bahwa aplikasi GTK + terlihat sama pada platform yang berbeda karena itu berarti saya tidak perlu menghabiskan waktu berminggu-minggu untuk mencari tahu bagaimana membuat UI saya mengatur diri mereka sendiri persis dengan masing-masing toolkit asli. Juga - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- tidak, tidak, kecuali Anda melakukan sesuatu yang salah, itu tidak baik. Saya belum pernah melihat peringatan kritis yang tidak berasal dari kesalahan saya sendiri dan tidak terlalu mudah untuk diperbaiki dengan menggunakan kode yang benar. Dan saya tidak mendapatkan pesan debug, bahkan peringatan
underscore_d
25

Saya belum pernah menggunakan GTK, tetapi dari pengalaman pribadi saya menggunakan Qt:

Ini lebih dari sekedar GUI sederhana. Ini kerangka aplikasi keseluruhan. Saya dulu menganggapnya sebagai perpustakaan Java untuk C ++. Ini menyediakan semua yang Anda sebutkan - database, XML, jaringan dan threading, dan banyak lagi. Ini juga menyediakan hal-hal seperti kontainer dan iterator, dan rekan-rekan ke sejumlah perpustakaan pendorong.

Hal yang paling mengesankan saya saat mulai menggunakan Qt adalah dokumentasi yang sangat ekstensif. Anda mendapatkan program bernama Qt Assistant, yang menyediakan dokumentasi API yang sepenuhnya terindeks dan dapat dicari di desktop Anda, serta banyak contoh kode dan tutorial. Saya merasa ada perbedaan besar dalam menelusuri web setiap kali untuk info API. Akses sangat cepat ketika Anda perlu mengingat tanda tangan metode.

Saya tidak yakin mana yang paling umum; itu mungkin sulit untuk diukur secara akurat. Keduanya sama-sama populer. Karena Gnome adalah desktop default Ubuntu, dan Gnome berada di atas GTK, jelas digunakan secara luas. Tentu saja, KDE juga sangat populer. Nokia sangat mendorong Qt di ruang seluler - OS Maemo mereka, yang digunakan pada N900 baru misalnya, akan segera beralih ke Qt sebagai toolkit default (saat ini adalah GTK.) Saya yakin Qt juga akan segera menjadi toolkit default untuk Symbian OS.

Saya belum pernah menggunakan Qt Creator, tetapi saya telah mendengar banyak hal baik tentangnya. Ini adalah C ++ IDE dengan integrasi berat yang jelas dengan Qt. Ia juga memiliki emulasi vim palsu yang selalu menyenangkan jika Anda suka hal semacam itu!

Qt menggunakan qmake untuk konfigurasi build. Saya menemukan ini jauh lebih baik daripada harus menulis file make Anda sendiri. Saya tidak tahu apa kegunaan GTK untuk membangun.

Beberapa hal yang saya temukan agak menyimpang dengan Qt pada awalnya adalah penggunaan makro preprocessor yang besar. Sistem sinyal / slot menyediakan mekanisme yang bagus untuk acara / pesan yang diteruskan dalam aplikasi Anda, tetapi ini terasa seperti sihir yang mungkin tidak mudah dibawa ke perangkat lain jika Anda mau. Juga, moc (meta-object compiler), meskipun saya tidak sepenuhnya yakin apa yang dilakukannya, juga terasa seperti keajaiban yang terjadi di balik layar.

Secara keseluruhan, saya akan merekomendasikan Qt, terutama jika Anda sedang belajar. Ini memiliki dokumentasi yang sangat luar biasa dan IDE yang bagus, dan forum yang sibuk. Anda akan dapat membangun aplikasi C ++ dengan sangat cepat, terutama dengan QML yang hadir di 4.7.

ngm
sumber
9

Itu mungkin tergantung pada apa yang ingin Anda lakukan. Saya akan merekomendasikan Qt, karena ini lebih dari GUI, ia memiliki pengikatan Python yang bagus (begitu juga Gtk), dan perpustakaan GUI sendiri (secara subyektif) lebih menyenangkan daripada Gtk.

Gtk di sisi lain lebih umum di dunia linux, jadi Anda mungkin bisa mendapatkan lebih banyak bantuan di web. Alasan meluasnya Gtk mungkin lebih berkaitan dengan Gnome dan Ubuntu, daripada manfaat teknis, tetapi jika Anda ingin perangkat lunak Anda berbaur dengan baik dengan keduanya, Anda akan mencapainya lebih mudah dengan Gtk.

Slartibartfast
sumber
7

Qt untuk satu yakin memiliki DB yang solid, jaringan, dukungan threading dll ... Ia melakukan lebih banyak daripada hanya GUI lintas platform (dan sebagian besar melakukannya dengan cukup baik).

Saya akan merekomendasikannya melalui GTK +.

ChristopheD
sumber
3

Hanya menambahkan keunggulan QT ke jawaban lain .. QT memiliki dokumentasi yang bagus, pembuat IDE & GUI -nya sendiri dan meningkatkan C ++ dengan beberapa konsep baru seperti slot / sinyal (pada dasarnya peristiwa).

Saya bukan pengembang GTK, jadi saya tidak bisa membandingkannya dengan dunia GTK :(

Gregor Petrin
sumber
11
Untuk Gtk, ada juga pembuat GUI Glade ( glade.gnome.org ).
davidbe
3

Qt. Ini tidak hanya berorientasi objek, tapi juga berorientasi objek "baik". Ini didasarkan pada "subset" dari C ++ yang tidak bergantung pada ketidakjelasan C ++ (tetapi Anda diizinkan untuk tetap menggunakannya, jika Anda menyukai masokisme;)).

Ini memiliki momentum yang kuat sekarang setelah Nokia membelinya (sebenarnya Nokia melakukannya ~ 2/3 tahun yang lalu). Ini akan ada di semua perangkat mobile Nokia DAN Intel (smartphone, netbook, tablet).

Ini adalah tulang punggung KDE, jadi sangat matang, tetapi dirancang dengan cara yang sangat fleksibel, yang memungkinkan untuk mendukung HARI INI semua "hal-hal keren" terbaru yang seharusnya dimiliki oleh kerangka kerja GUI yang lebih dari sekadar-hanya-biasa .

Lakukan itu.

Detro
sumber
5
Subset? Lebih mirip superset, mengingat qmake dan moc.
rr-
1

Sepertinya Nokia juga akan menggunakan Qt di mana-mana, seperti di Maemo

jlru
sumber
1

Jika Anda ingin aplikasi Anda berjalan di iOS, Android, Blackberry, platform seluler lainnya, Windows, Mac OSX, dan Linux, gunakan Qt.

qt-project.org

trusktr.dll
sumber