Что выбрать: GTK + или Qt? [закрыто]


89

Может ли кто-нибудь подсказать, как лучше всего использовать эти библиотеки сегодня? Это просто графический интерфейс или у них есть поддержка базы данных, XML, сетей, потоковой передачи и т. Д.?

Я читал о них и думал начать изучать / использовать один из них.

Какой самый распространенный? В чем разница между ними? Почему вы предпочли бы одно другому?


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

3
Вы также можете посмотреть на этот в основном связанный с этим вопрос: stackoverflow.com/questions/1801074/…
Калеб Хайтт - cjhuitt

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

Ответы:


95

Поскольку вы, кажется, в первую очередь ориентируетесь на Linux, то выбор в основном зависит от языка программирования, который вы хотите использовать.

Если вы кодируете на C, то, очевидно, переходите на GTK +

Если вы пишете код на C ++, используйте Qt, иначе вам понадобится Gtkmm (оболочка C ++ над GTK +)

Если вы пишете код на Python, и GTK +, и Qt имеют привязки для языка: см. PyGtk , PyQt и PySide (тот, который был запущен самой Nokia).

Если вы пишете код на Java, Qt больше не является жизнеспособным вариантом, imho, поскольку Nokia прекратила поддержку Qt Jambi (привязки Java для Qt).

Кроме того, Qt является более первоклассным в отношении своего API графа сцены QGraphicsScene , своего механизма сценариев, созданного на основе 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 .
Хосе Андиас

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

3
Ох ... дни Symbian ...
дака

42

Раньше я использовал 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 для проектов C ++ QT. Что касается библиотеки, мне также очень понравилась документация и предоставленные 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, но слышал о нем много хорошего. Это IDE C ++ с очевидной тесной интеграцией с Qt. Он также имеет поддельную эмуляцию vim, что всегда приятно, если вам нравятся такие вещи!

Qt использует qmake для настройки сборки. Я нашел это намного приятнее, чем писать свои собственные make-файлы. Я не знаю, что GTK использует для сборки.

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

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


9

Вероятно, это зависит от того, чем вы хотите заниматься. Я бы порекомендовал Qt, потому что это больше, чем графический интерфейс, у него есть хорошие привязки Python (как и Gtk), а сами библиотеки GUI (субъективно говоря) более приятны, чем Gtk.

С другой стороны, Gtk более распространен в мире Linux, поэтому вы, вероятно, сможете получить дополнительную помощь в Интернете. Причина широкого распространения Gtk, вероятно, больше связана с Gnome и Ubuntu, чем с техническими достоинствами, но если вы хотите, чтобы ваше программное обеспечение хорошо сочеталось с этими двумя, вам будет легче добиться этого с Gtk.


7

Qt наверняка имеет надежную базу данных, сеть, поддержку потоков и т. Д. Он делает гораздо больше, чем просто кроссплатформенный графический интерфейс (и делает большую часть этого довольно хорошо).

Я бы рекомендовал это по сравнению с GTK +.


3

Просто добавление преимуществ QT к другим ответам. QT имеет отличную документацию, собственный создатель IDE и GUI и расширяет C ++ некоторыми новыми концепциями, такими как слоты / сигналы (в основном события).

Я не разработчик GTK, поэтому не могу сравнивать их с миром GTK :(


11
Для Gtk также существует создатель GUI Glade ( glade.gnome.org ).
davidbe

3

Qt. Он не только объектно-ориентированный, это «хороший» объектно-ориентированный. Он основан на «подмножестве» C ++, которое не полагается на безвестность C ++ (но вам разрешено придерживаться их, если вам нравится мазохизм;)).

Сейчас, когда Nokia купила его, он набирает обороты (на самом деле Nokia купила его ~ 2/3 года назад). Он будет во всех мобильных устройствах Nokia И 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.