Що я повинен вибрати: GTK + або Qt? [зачинено]


88

Хтось може підказати, як сьогодні найкраще використовувати ці бібліотеки? Це просто графічний інтерфейс, чи вони також мають підтримку баз даних, XML, мереж, потоків тощо?

Я читав про них і думав почати вчитися / користуватися одним із них.

Який найпоширеніший? Яка різниця між ними? Чому б ви вибрали одне над іншим?


20
Спочатку було багато суперечок щодо моделі ліцензування Qt, яка була або повноцінною GPL, або комерційною, тоді як GTK + була LGPL (тому останню було простіше використовувати в поєднанні з вашим закритим вихідним кодом). Але зараз Qt також доступний як LGPL IIRC, тому це вже не справжня причина вибирати той чи інший.
Роальт

3
Ви також можете подивитися на цьому в основному пов'язаний з цим питання: stackoverflow.com/questions/1801074 / ...
Калеб Huitt - cjhuitt

4
І знову хороше питання, закрите на stackoverflow. Я хочу додати, що якщо вам потрібен хороший інтегрований віджет HTML, вам доведеться використовувати GTK зараз (після того, як QT 5.2 перейшов до різко / невикористовуваного зменшеного набору функцій) або використовувати QT та вбудувати Chrome CEF, який додає багато речей, ускладнень та 20 МБ на ваш додаток.
Лотар

Відповіді:


94

Оскільки ви, насамперед, націлені на Linux, тоді вибір здебільшого залежить від мови програмування, яку ви хочете використовувати.

Якщо ви кодуєте на мові C, тоді, очевидно, вибирайте GTK +

Якщо ви кодуєте на C ++, перейдіть за Qt, інакше вам знадобиться Gtkmm (обгортка C ++ над GTK +)

Якщо ви кодуєте на Python, і GTK +, і Qt мають прив'язки до мови: див. PyGtk , PyQt і PySide (той, який запустили самі Nokia).

Якщо ви кодуєте на Java, Qt більше не є життєздатним варіантом, оскільки Nokia припинила Qt Jambi (прив'язка Java для Qt).

Крім того, Qt є більш першокласним щодо сценарію QGraphicsScene API, механізму сценаріїв, побудованого над Javascript Core (двигун, що працює на WebKit), стану автомата та анімації та декларативного інтерфейсу .

GTK + не пропонує так багато, хоча ви можете використовувати Clutter поряд з ним.

Якщо ви спеціально вивчаєте DB, функції XML (GTK + має синтаксичний аналізатор для підмножини XML) та потокові функції (GTK + має GLib ), тоді Qt запропонує все те, що в QtSql , QtXml та QtConcurrent .

Загалом, я б сказав, що Qt - це вірний вибір. Але GTK + теж дуже здатний.

Я не впевнений, що ви отримаєте кришталево чітку відповідь на своє запитання, яка пояснює, чому деякі люди надалі віддають перевагу Gnome перед KDE або навпаки. Виберіть, що вам найбільше підходить.

PS: Я планую також орієнтуватися на Symbian, а потім перейти до Qt.

РЕДАГУВАТИ: Щось, що також чудово підходить для Qt, це те, що QtWebViewвін додає Chromium у вашу програму Qt для відображення веб-вмісту. Інші вбудовують веб-вміст у свої програми, використовуючи, наприклад, Awesomium або Berkelium.


Не забувайте, що QtScript працює на основі JavaScriptCore, який на сьогоднішній день є найшвидшим механізмом JavaScript завдяки SquirrelFish Extreme.
CMircea

1
Щодо вашого редагування, існує WebKitGtk + для GTK +. Якщо один не є значно зрілішим за інший, я не думаю, що існування QtWebKit кваліфікується як перевага перед GTK +.
Метью

Якщо ви кодуєте в Ruby, шукайте QtRuby .
José Andias

5
gtkmmце чудово, вся потужність GTK +, але використовуючи фактичний C ++ за сучасним визначенням, створюючи найчистіший і читабельніший код графічного інтерфейсу, який я бачив ... насправді, просто найбільш терпимий , тому що коли я вперше почав намагатися навчитися програмуванню графічного інтерфейсу, саме охайність gtkmmвідновила мою волю до життя. На щастя, наполегливість дала свої результати, і я з’ясував, що це надзвичайно потужний ефект, і це заохотило мене більше зайнятись C ++ 14, ніж C ++ 03. Крім того, він добре підтримується тим самим основним супровідником вже більше десяти років AFAICT. Я просто фанат, ніякої приналежності тощо
underscore_d

3
О ... дні Symbian ...
daka

41

Я раніше використовував GTK +, QT та wxWidgets. Ось короткий зміст:

У своєму першому крос-платформенному проекті інтерфейсу користувача я вирішив вибрати wxWidgets, головним чином тому, що на той час ліцензія не була настільки обмежувальною, як QT (QT була GPL і лише для Linux), і вона мала специфічний для платформи інтерфейс (на відміну від GTK). Проект працював добре, але трапилось чимало помилок, які змусили його правильно скомпілюватись та запуститись на інших платформах - іноді деякі події запускалися по-різному та ін. Також GDI у wxWidgets був досить повільним.

Далі я використав GTK для іншого проекту в python. Для цього я використовував прив’язки python, і все працювало більш-менш гладко. Мені не дуже сподобався той факт, що користувальницький інтерфейс не виглядав рідним для Windows та Mac, а також, коли ви запускаєте додаток GTK +, він завжди налагоджує виводить навантаження критичних попереджень, які, здається, добре ігнорувати. : S

Нарешті, я зробив дуже простий проект QT тепер, коли Nokia придбала його і був блискучим. Найкращий із трьох. По-перше, якщо ви не старий школяр, який віддає перевагу VI або Emacs, QtCreator є чудовим. Я дуже люблю VI і використовував його роками, але я набагато віддаю перевагу QtCreator для проектів Q ++ на C ++. Щодо бібліотеки мені також дуже сподобалась документація та надані API. QT має концепцію слотів та сигналів, які представляють нові ключові слова C ++ та препроцесор. В основному, прочитавши підручник, ви легко його отримаєте і почнете любити. Зараз я займаюся розробкою iPhone, і це схоже на парадигму інтерфейсу Cocoa / Interface Builder.

Короткий зміст: Я хотів би взяти QT, опустивши руки. Ліцензія досить гарна, а SDK та документація дуже приємні.


13
Я вважаю позитивним, що додатки GTK + виглядають однаково на різних платформах, оскільки це означає, що мені не доведеться витрачати зайві тижні, роздумуючи, як змусити мої інтерфейси влаштувати себе правильно з кожним власним набором інструментів. Також - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- ні, це не так, якщо ви не робите щось неправильно, що не є добре. Я жодного разу не бачив критичного попередження, яке не було пов’язане з власною помилкою і яке було надзвичайно просто виправити за допомогою правильного коду. І я не отримую повідомлень про налагодження, навіть попереджень
underscore_d

25

Я ніколи не використовував GTK, але з мого особистого досвіду використання Qt:

Це набагато більше, ніж простий графічний інтерфейс. Це цілий фреймворк програми. Раніше я думав про це як про бібліотеки Java для C ++. Він надає все, що ви згадали, - базу даних, XML, мережеві та потокові передачі тощо. Він також надає такі речі, як контейнери та ітератори, а також аналоги ряду бібліотек підвищення.

Що мене найбільше вразило, коли я почав використовувати Qt, це надзвичайно обширна документація. Ви отримуєте програму під назвою Qt Assistant, яка надає повністю індексовану та доступну для пошуку документацію щодо API на робочому столі, а також численні приклади коду та навчальні посібники. Я виявив, що це робило велику різницю в пошуку кожного разу в Інтернеті інформації про API. Дуже швидкий доступ, коли вам потрібно запам'ятати підпис методу.

Я не впевнений, що є найбільш поширеним; це, мабуть, важко точно виміряти. Вони, звичайно, обидва популярні. Оскільки Gnome є робочим столом Ubuntu за замовчуванням, а Gnome сидить поверх GTK, він, очевидно, широко використовується. Звичайно, KDE також дуже популярний. Nokia активно натискає Qt на мобільний простір - їх Maemo OS, яка використовується, наприклад, на новому N900, незабаром перейде на Qt як набір інструментів за замовчуванням (наразі це GTK.) Я вважаю, що Qt також скоро стане набором інструментів за замовчуванням для ОС Symbian.

Я не використовував Qt Creator, але чув багато хорошого про нього. Це середовище розробки середовища C ++ з очевидною важкою інтеграцією з Qt. Він також має підроблену емуляцію vim, що завжди приємно, якщо вам подобаються такі речі!

Qt використовує qmake для конфігурації збірки. Я знайшов це набагато приємніше, ніж писати власні файли макетів. Я не знаю, що GTK використовує для будівництва.

Кілька речей, які я спочатку виявив трохи невідповідними Qt, - це велике використання макросів препроцесора. Система сигналів / слотів забезпечує приємний механізм передачі подій / повідомлень у вашому додатку, але вона справді схожа на магію, яку, можливо, не легко перенести в інший набір інструментів, якщо ви захочете. Крім того, moc (компілятор мета-об'єктів), хоча я не зовсім впевнений, що він робить, також відчуває себе занадто схожим на магію, що відбувається за лаштунками.

Загалом, я б рекомендував Qt, особливо якщо ви навчаєтесь. Він має справді дивовижну документацію, приємну IDE та зайняті форуми. З ним ви зможете створювати програми на C ++ дуже швидко, особливо з QML, що з’явиться у версії 4.7.


9

Можливо, це залежить від того, що ви хочете зробити. Я б порекомендував Qt, оскільки це більше, ніж графічний інтерфейс, він має приємні прив'язки Python (як і Gtk), а самі бібліотеки графічного інтерфейсу (суб'єктивно кажучи) приємніші за Gtk.

Gtk, з іншого боку, є більш поширеним у світі Linux, тому ви, мабуть, можете отримати більше допомоги в Інтернеті. Причина поширення Gtk, ймовірно, має більше спільного з Gnome та Ubuntu, а не з технічних переваг, але якщо ви хочете, щоб програмне забезпечення добре поєднувалося з цими двома, вам буде легше досягти цього з Gtk.


7

Qt напевно має надійну БД, мережу, підтримку потоків тощо ... Це робить набагато більше, ніж просто крос-платформний графічний інтерфейс (і більшість із них робить цілком непогано).

Я б рекомендував його за GTK +.


3

Просто додавши переваги QT до інших відповідей .. QT має чудову документацію, власний IDE і графічний інтерфейс і вдосконалює C ++ за допомогою деяких нових концепцій, таких як слоти / сигнали (в основному події).

Я не розробник GTK, тому не можу порівняти їх зі світом GTK :(


11
Для Gtk також існує творець графічного інтерфейсу Glade ( glade.gnome.org ).
davidbe

3

Qt. Це не тільки об’єктно-орієнтована, це „хороша” об’єктно-орієнтована. Він базується на "підмножині" C ++, яка не покладається на неясність C ++ (але вам дозволяється дотримуватися їх, якщо ви любите мазохізм;)).

Зараз він придбав потужний імпульс, коли Nokia його придбала (насправді Nokia зробила це ~ 2/3 роки тому). Це буде на всіх мобільних пристроях Nokia AND Intel (смартфонах, нетбуках, планшетах).

Він є основою KDE, тому він дуже зрілий, але розроблений дуже гнучко, завдяки чому сьогодні можна підтримувати всі найновіші «круті речі», які мали б бути просто графічні інтерфейси .

Дій.


5
Підмножина? Більш схожий на суперсет, враховуючи qmake та moc.
rr-

1

Також схоже, що Nokia збирається використовувати Qt скрізь, як на Maemo


1

Якщо ви хочете, щоб ваш додаток працював на iOS, Android, Blackberry, інших мобільних платформах, Windows, Mac OSX та Linux, використовуйте Qt.

qt-project.org

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.