LINUX.ORG.RU

Рациональные доводы в пользу Qt и Gtk

 , , ,


2

5

Привет ЛОР, пишу в удаленный тред конечно, но! Есть пару недостоющих мне приложений, которые я хочу дописать, но в свете последних событий (выхода Gtk3 и Qt5) не могу выбрать тулкит.

Это конечно невозможно, но прошу привести рациональные доводы в пользу того или иного тулкита. Т. к. писать я собираюсь под то на чем сижу, то даже такие мелочи как DE важны. Ко всему кроссплатформенность не так важна, если только на мобильные платформы, т. к. не хватает мне этого ПО именно в Linux.

Пока что я прикинул только:

Qt

  • Qt5 пошустрее Gtk, но это, я думаю, дело поправимое
  • Огромная поддержка платформ, но в то же время Linux не является приоритетной платформой, как с GTK, да и опять же дело поправимое

Gtk

  • Gnome3 мне не очень пока что нравится, но это субъективно, да и не гномом едины
  • Мейнстрим - на Qt нет ни одного крупного браузера (QupZilla явно не попадает под определение крупного популярного браузера)
  • Gnome'вский стек по мне лучше, хотя бы тем что он на GLibc, который еще много где используется

Есть пару недостоющих мне приложений, которые я хочу дописать

спеллчекер?

lazyklimm ★★★★★
()

gtk упростили, а что в плюс? Память меньше стало жрать? НЕТ.

darkenshvein ★★★★★
()

против Gtk: они так и не додумались сделать там нормальный paintengine, чтоб заменять можно было. отрисовка там вообще срамотная

ckotinko ☆☆☆
()

Есть пару недостоющих мне приложений, которые я хочу дописать

Что за приложения?

anonymous
()

Мейнстрим - на Qt нет ни одного крупного браузера (QupZilla явно не попадает под определение крупного популярного браузера)

Тут у Gtk нет особого преимущества: браузеры используют его как стабильный API, который найдётся в большинстве дистрибутивов, а не как тулкит. Это касается и libreoffice тоже — он, как и браузеры, строит свою систему виджетов поверх Gtk и рисует в обход него, так что с подноготной рендеринга в Gtk не сталкивается.

quiet_readonly ★★★★
()

Рациональные доводы у тебя только в пользу Qt, так что вывод очевиден.

it-nativa
()

qt проще и работает лучше. если ты не спп хейтер конечно.

nanoolinux ★★★★
()

Linux не является приоритетной платформой для Qt?

Y ★★
()

Еще добавлю плюсы

Qt:

  • более активная разработка
  • интегрированая система сборки
  • есть API для БД

Gtk:

  • менее наркоманский API
  • менее наркоманский редактор Glade
  • GObject Introspection

Минусы

Qt:

  • Блевотное API
  • Меньше байндингов
  • Выглядит как говно

Gtk:

  • Геморы на MacOSX, Windows как со сборкой так и с оформлением
  • Чуть деревянные контролы
  • Таблица/дерево - вообще жесть, что они курили? Такое мог придумать только замаскированый Qt-шник
  • Отсутствие доков по байндингам для языков на GObject Introspection
  • Писать компоненты в GObject стиле долго и муторно, на С, со всем бойлерплейтом. Тут или мучаться с Vala или просто отказаться от GObject в своем коде. Потому и либы пишут только из под палки. На Gtk лучше не писать вообще на С
  • гномовский стек посильнее Qt-шного, но обычно доступен только со всем гномом. Тут наверное справедливее сравнивать с kdelibs

Гномостек

AccountsService-1.0.gir  Gee-1.0.gir             GstRiff-1.0.gir         Pango-1.0.gir
Atk-1.0.gir              GeocodeGlib-1.0.gir     GstRtp-0.10.gir         PangoCairo-1.0.gir
Atspi-2.0.gir            Gio-2.0.gir             GstRtp-1.0.gir          PangoFT2-1.0.gir
Avahi-0.6.gir            GIRepository-2.0.gir    GstRtsp-0.10.gir        PangoXft-1.0.gir
AvahiCore-0.6.gir        Gkbd-3.0.gir            GstRtsp-1.0.gir         Peas-1.0.gir
BraseroBurn-3.6.0.gir    GL-1.0.gir              GstSdp-0.10.gir         PeasGtk-1.0.gir
BraseroMedia-3.6.0.gir   Gladeui-2.0.gir         GstSdp-1.0.gir          Polkit-1.0.gir
cairo-1.0.gir            GLib-2.0.gir            GstTag-0.10.gir         PolkitAgent-1.0.gir
Cally-1.0.gir            GMenu-3.0.gir           GstTag-1.0.gir          Poppler-0.18.gir
Caribou-1.0.gir          GModule-2.0.gir         GstVideo-0.10.gir       Rest-0.7.gir
Champlain-0.12.gir       GnomeBluetooth-1.0.gir  GstVideo-1.0.gir        RestExtras-0.7.gir
Cheese-3.0.gir           GnomeDesktop-3.0.gir    Gtk-2.0.gir             Rsvg-2.0.gir
Clutter-1.0.gir          GnomeKeyring-1.0.gir    Gtk-3.0.gir             Secret-1.gir
ClutterGdk-1.0.gir       Goa-1.0.gir             GtkChamplain-0.12.gir   SecretUnstable-0.gir
ClutterGst-2.0.gir       GObject-2.0.gir         GtkClutter-1.0.gir      SocialWebClient-0.25.gir
ClutterX11-1.0.gir       Grl-0.1.gir             GtkSource-3.0.gir       Soup-2.4.gir
Cogl-1.0.gir             Grl-0.2.gir             GtkVnc-1.0.gir          SoupGNOME-2.4.gir
CoglPango-1.0.gir        GrlNet-0.1.gir          GtkVnc-2.0.gir          TelepathyFarstream-0.6.gir
Colord-1.0.gir           GrlNet-0.2.gir          GTop-2.0.gir            TelepathyGLib-0.12.gir
DBus-1.0.gir             Gsf-1.gir               Gucharmap-2.90.gir      TelepathyLogger-0.2.gir
DBusGLib-1.0.gir         GSSDP-1.0.gir           GUdev-1.0.gir           Totem-1.0.gir
EBook-1.2.gir            Gst-0.10.gir            GUPnP-1.0.gir           TotemPlParser-1.0.gir
ECalendar-1.2.gir        Gst-1.0.gir             GUPnPIgd-1.0.gir        Tracker-0.14.gir
EDataServer-1.2.gir      GstApp-0.10.gir         GUsb-1.0.gir            TrackerExtract-0.14.gir
Epiphany-3.6.gir         GstApp-1.0.gir          GVnc-1.0.gir            TrackerMiner-0.14.gir
EvinceDocument-3.0.gir   GstAudio-0.10.gir       GVncPulse-1.0.gir       Unique-1.0.gir
EvinceView-3.0.gir       GstAudio-1.0.gir        GWeather-3.0.gir        Unique-3.0.gir
Farstream-0.2.gir        GstBase-0.10.gir        IBus-1.0.gir            UPowerGlib-1.0.gir
Folks-0.6.gir            GstBase-1.0.gir         JSCore-1.0.gir          Vte-0.0.gir
fontconfig-2.0.gir       GstCheck-0.10.gir       JSCore-3.0.gir          Vte-2.90.gir
freetype2-2.0.gir        GstCheck-1.0.gir        Json-1.0.gir            WebKit-1.0.gir
Gck-1.gir                GstController-0.10.gir  LangTag-0.4.gir         WebKit2-3.0.gir
GConf-2.0.gir            GstController-1.0.gir   Libosinfo-1.0.gir       WebKit-3.0.gir
Gcr-3.gir                GstFft-0.10.gir         libxml2-2.0.gir         Wnck-3.0.gir
GData-0.0.gir            GstFft-1.0.gir          Memphis-0.2.gir         xfixes-4.0.gir
GDesktopEnums-3.0.gir    GstInterfaces-0.10.gir  Mx-1.0.gir              xft-2.0.gir
Gdk-2.0.gir              GstNet-0.10.gir         MxGtk-1.0.gir           Xkl-1.0.gir
Gdk-3.0.gir              GstNet-1.0.gir          Nautilus-3.0.gir        xlib-2.0.gir
GdkPixbuf-2.0.gir        GstNetbuffer-0.10.gir   NetworkManager-1.0.gir  xrandr-1.3.gir
GdkX11-2.0.gir           GstPbutils-0.10.gir     NMClient-1.0.gir        Zpj-0.0.gir
GdkX11-3.0.gir           GstPbutils-1.0.gir      Notify-0.7.gir
Gdm-1.0.gir              GstRiff-0.10.gir        PanelApplet-4.0.gir                

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 3)

что он на GLibc

Вернее, часть кода вынесена в отдельную библиотеку GLib, документация к которой идёт совместно с проектом Gtk. Если сделаете выбор в пользу Gtk, то в среднем на Vala код получается в разы короче, чем на C, не говоря о других преимуществах.

backbone ★★★★★
()
Ответ на: комментарий от vertexua

гномовский стек посильнее Qt-шного, но обычно доступен только со всем гномом. Тут наверное справедливее сравнивать с kdelibs

поэтому сравнивать стоит gtk-барахло vs qt-барахло. и тут qt явно сливает из-за монструозности.

ananas ★★★★★
()

ты бы определился сначала, устраивать срач gtk vs qt или gnome vs kde

хотя, для срача это не столь и существенно

ananas ★★★★★
()

Qt5 пошустрее Gtk, но это, я думаю, дело поправимое

Тормозящего говнокода напишешь на Qt5, который будет со скоростью Gtk работать? :)

Огромная поддержка платформ, но в то же время Linux не является приоритетной платформой, как с GTK, да и опять же дело поправимое

Будешь писать не кроссплатформенный код на Qt5, чтобы только под Linux работало?

Или в чем заключается эта «поправимость»?

kamre ★★★
()
Ответ на: комментарий от ananas

поэтому сравнивать стоит gtk-барахло vs qt-барахло. и тут qt явно сливает из-за монструозности.

что значит «монструозности»?

alex_custov ★★★★★
()
Ответ на: комментарий от vertexua

Qt: Блевотное API

А можно немного примеров? Желательно сразу с обратными примерами, в смысле как можно было бы сделать (или где уже сделано) лучше.

DarkEld3r ★★★★★
()
Ответ на: комментарий от vertexua

Qt:
...
Меньше байндингов

Можно подумать, что ГТКфилы пишут сразу на десятке языков, потому что по другому не получается.

AF ★★★
()
Ответ на: комментарий от ananas

поэтому сравнивать стоит gtk-барахло vs qt-барахло. и тут qt явно сливает из-за монструозности.

какая чушь, чтоб сделать гуй на Qt надо всего два файла qtcore + qtgui, которые вообще можно статично слинковать, а для gtk минимум нужны:

libgtk
libgdk
libatk
libpango
libcairo
libpixman
libgobject
libgdkpixbuf
gobject-introspection
glib

и т.д., и это не считая их зависимостей

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от backbone

С? Vala? Чувак, на дворе 2013й год, AOT-компиляторы, умные генераторы DSL, а ты притащил какой-то кусок железа из эпохи четырехкилобайтных машин

stevejobs ★★★★☆
()
Ответ на: комментарий от wota

Твои домыслы. Хочешь такого сравнения - сделай банальный хэловорлд и для куте и для гтк, и сравнивай выхлоп ldd

ananas ★★★★★
()
Ответ на: комментарий от ananas

Твои домыслы. Хочешь такого сравнения - сделай банальный хэловорлд и для куте и для гтк, и сравнивай выхлоп ldd

в отличие от тебя, я знаю, что говорю:

libQt5Gui.so

  NEEDED               libQt5Core.so.5
  NEEDED               libGL.so.1
  NEEDED               libstdc++.so.6
  NEEDED               libm.so.6
  NEEDED               libc.so.6

libgtk-3.0

  NEEDED               libgdk-3.so.0
  NEEDED               libgmodule-2.0.so.0
  NEEDED               libpangocairo-1.0.so.0
  NEEDED               libX11.so.6
  NEEDED               libXi.so.6
  NEEDED               libXfixes.so.3
  NEEDED               libcairo-gobject.so.2
  NEEDED               libcairo.so.2
  NEEDED               libgdk_pixbuf-2.0.so.0
  NEEDED               libatk-1.0.so.0
  NEEDED               libatk-bridge-2.0.so.0
  NEEDED               libpangoft2-1.0.so.0
  NEEDED               libpango-1.0.so.0
  NEEDED               libfontconfig.so.1
  NEEDED               libgio-2.0.so.0
  NEEDED               libgobject-2.0.so.0
  NEEDED               libglib-2.0.so.0
  NEEDED               libm.so.6
  NEEDED               libpthread.so.0
  NEEDED               libc.so.6

это прямые зависимости для гуевой части, по факту только они и важны, но даже, если и смотреть ldd, то получаем 24(Qt) vs 54(GTK)

wota ★★
()
Ответ на: комментарий от fluorite

Это враппер WebKit для GIR, таким образом это делает его доступным из любых поддерживающих GIR языков

vertexua ★★★★★
()
Ответ на: комментарий от wota

Так это и отлично. Библиотеки на все случаи жизни отдельно. Если мне нужно что-то на C в консоли написать, то беру glib. Нужно выводить графику - Cairo. Работа с текстом - Pango. По моему несомненный плюс в пользу архитектуры GTK.

dearboy
() автор топика
Ответ на: комментарий от Akamanah

Что значит это RIP? Я не вижу на то особых причин. Согласно опросу на Reddit Gnome3 немного отстает от KDE.

OpenShot перешли на Qt, но это скорее из-за портируемости.

LXDE слились с Razor-Qt лишь из-за чуть большего потребления ресурсов у Gtk3 по сравнению с Qt5, но им даже небольшая разница важна. Эта проблема мне не кажется сильно важной, т. к. всегда есть место оптимизации. А если Gtk4 будет быстрее, бросятся переписывать LXDE на нем?

В почтовой рассылке далеко не последний разработчик XFCE (Nick Schermer) не считает что у Gtk3 есть какие-то серьезные проблемы чтобы отказываться от него и работа над переходом ведется. Единственное что я видел негативного, это пост разработчика SpaceFM (страннейшего файлового менеджера), который поднял панику на весь интернет что Gtk3 это ужас, плохо, все поломали!

dearboy
() автор топика
Ответ на: комментарий от dearboy

Библиотеки на все случаи жизни отдельно. Если мне нужно что-то на C в консоли написать, то беру glib. Нужно выводить графику - Cairo. Работа с текстом - Pango. По моему несомненный плюс в пользу архитектуры GTK.

a) Qt тоже модульный, только там все грамотно разделено, в большинстве случаев тебе хватит минимума - две библиотеки, даже QtCreator требует всего-лишь три (QtCore, QtGui и QtNetwork), но при этом тебе доступны - v8, webkit, svg, sql, multimedia и пр. действительно опциональные вещи
б) надо консоль - бери QtCore
в) cairo - не часть gtk, а сторонняя библиотека
г) pango - ты не захочешь его использовать отдельно от GTK, а просто текст рисовать и мерять умеет и cairo

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от comp00

Это не какое-то одно приложение. Мне интересно изучить весь стек, попробовать разные языки в связке с ним. Да хоть C, Vala, JS, QML.

Вот кстати QML мне очень нравится, как и биндинги Clutter для JS. Вообще QML это одна из причин по которой мне нравится Qt - удобно, прогрессивно, молодежно, как-то так.

Ну и еще тот факт что Qt будет в Ubuntu Touch, Blackberry Mobile, MeeGo от Jolla. Хотя Gtk тоже когда-то засветился в Maemo и сейчас есть порт Gnome 3 на Tizen.

P. S.: что-то много сообщений сразу вышло.

dearboy
() автор топика
Ответ на: комментарий от wota

cairo - не часть gtk, а сторонняя библиотека

GTK использует Cairo. Вот я о чем, даже рендеринг виджетов построен ступенчато, в отличие от монолитного QtGui.

dearboy
() автор топика
Ответ на: комментарий от dearboy

C, Vala, JS, QML.

Тогда я ошибся. Наверно все же GTK.

Vala, JS, QML.

за эти не ручаюсь, но для С точно лучше GTK

comp00 ★★★★
()

GTK просто графическая либа, а Qt - комбайн.
А почему не рассматривают wxwidgets?

CrazyAlex25 ★★★
()
Ответ на: комментарий от dearboy

Что значит это RIP?

Помирает, вот что значит. Недавно тут был тред, от которого даже закаленные лоровцы выпали в осадок. Это про выпил пастинга средней кнопкой.

Согласно опросу на Reddit Gnome3 немного отстает от KDE.

Бывают в жизни огорчения. Но разве доля когда-то была показателем?

А у меня лично к гтк претензий слишком много. Да и большинство тут уже перечислили.

Akamanah ★★★★★
()
Ответ на: комментарий от dearboy

GTK использует Cairo. Вот я о чем, даже рендеринг виджетов построен ступенчато, в отличие от монолитного QtGui.

тебе лично нет никакой пользы от этого - cairo существует и без GTK, более того:

http://www.cairographics.org/manual/cairo-cairo-surface-t.html#cairo-surface-...

cairo «из коробки» умеет Qt, а что касается «рендеринг виджетов построен ступенчато» - посмотри демку Qt и увидишь, что там виджеты как раз рисуются как и где угодно

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от Akamanah

Это про выпил пастинга средней кнопкой.

Начнёт катиться в говно - форкнут. Ибо Qt-хейтеров достаточно много. Если к тому времени ничего ещё более годного не появится.

MiniRoboDancer ★☆
()
Ответ на: комментарий от dearboy

Тьфу, только про evas собирался отвечать. В прикладухе я его не использовал, но выглядит оче годно.

Akamanah ★★★★★
()
Ответ на: комментарий от dearboy

А что-то более годное уже есть - EFL.

Точно, забыл совсем. И за ним, кстати, будущее, ибо Tizen не может не взлететь, Samsung с его долей рынка - это вам не хухры-мухры. Enlightenment тоже одна сплошная годнота, но до сих пор не готово.

MiniRoboDancer ★☆
()
Ответ на: комментарий от dearboy

Баду пихали только в бюджетки, нативных приложений на неё почти нет, а в плане J2ME она ничем не выигрывает у тех же Аш. А перед такими же с виду карманными бюджетками-кирпичиками Monte и Galaxy разница для среднестатистического покупателя вообще не явна, один хрен везде тачвиз. Tizen же они позиционируют если не как замену, то по крайней мере как альтернативу Android. Учитывая нынышнее положение Samsung, впихнуть это хотя бы в один аппарат даже mid-end класса - гарантия успеха.

MiniRoboDancer ★☆
()

Многие делают свою программу без GUI вовсе. И два комплекта GUI — отдельно для QT, отдельно для GTK.

Предлагаю сделать тебе так же. Только сначала продумай вопрос взаимодействия GUI с программой. Будь то сокеты, вызовы функций или что то еще.

Даже если ты выберешь один конкретный тулклит, предлагаю сделать так же. Два проекта, собственно сама программа, и GUI к ней. А при распространении, опубликуй способ взаимодействия. Возможно кто-то другой напишет GUI под другой тулклит, консоль, или что то еще (web-интерфейс).

Бонусом получишь возможность удаленного управления, когда сама программа установлена на одной машине, а управление осуществляется с другой. Это очень приятный бонус.

ivanlex ★★★★★
()
Ответ на: комментарий от ivanlex

Очень годная идея, но ведь помимо самого Gui используется еще куча библиотек вроде Gio/Kio, Gstreamer/Qtmedia. А вообще - думаю близко к этому, просто весь особый функционал вынести (например библиотека для синхронизации с Evernote), а дальше уже смотреть разные варианты.

dearboy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.