LINUX.ORG.RU

[не флейма ради] GTK/gtkmm vs Qt


0

0

Добрый день.

Довольно длительное время пишу под Linux на GTK и некоторое количество времени на gtkmm. В итоге сложилось довольно странное о нем впечатление: как пользователю мне GTK нравится гораздо больше чем Qt, но вот с точки зрения программирования многое не устраивает. К примеру, если взять GTK, то написать на нем собственный виджет с нуля - это целое приключение, с его объектной моделью и пр. (на gtkmm думаю, гораздо проще, но пока не пробовал, хотя из-за одной только возможности наследовать виджеты разрабатывать приложения на gtkmm по сравнению с GTK, имхо, значительно легче). Так же хотелось бы вместо GTK что-то вроде большого кроссплатформенного фреймворка, который бы предоставлял классы для работы с сетью, файлами, XML и т. п. Да, есть, к примеру, GNet, но C++-биндингов для него нету, хотя хотелось бы писать именно на C++ ну и вообщем много чего не хватает...

Ну и всвязи с этим в последнее время начал поглядывать на Qt, плюсов много, единственное, что пока не нравится - это то, что она написана не в стиле C++ - сигналы реализованы через макросы, а не через шаблоны, как в gtkmm, исключения не используются и т. п. Но несмотря на это, у меня прочно засела идея поставить на виртуалки Windows и Mac OS X и попробовать пописать что-нибудь кросплатформенное на C++/Python и Qt.

И вот собственно вопрос: может быть я все-таки недооцениваю GTK, и у него есть множество своих плюсов, которых нет у Qt? Буду благодарен, если подарите ссылки на какие-нибудь статейки, объективно сравнивающие GTK и Qt (как, например, вот эта - http://www.wikivs.com/wiki/GTK_vs_Qt).


Ответ на: комментарий от vertexua

Я почему спрашиваю.

Я не верю в 1%, но пускай 4%. Что имеем? 4% рынка, раздробленного на сотни дистров, постоянно холиварящего по мелочам коммюнити. «Мля, что круче Qt или Gtk?». Да они оба круче в 10 раз средств на винде, надо быстро рынок захватывать.

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

Вы пукнули в воздух. Основано на субьективном раболепии к Qt. Предлагаю создать тред, где люди без холиваров обсудят идеальный тулкит. Какой он должен быть. Слова Qt и Gtk запрещено произносить, ибо есть недостатки у костыли у обоих

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

Ты предлагаешь написать ещё один или выбрать GTK? В любом из случаев твоё сообщение было проблемным, ибо толсто.

Deleted
()
Ответ на: комментарий от iZEN

В Eclipse подцепляю к проекту получившиеся архивы: /usr/local/share/java/classes/gtk-2.10.jar и /usr/local/share/java/classes/gnome-2.12.jar. Бесполезно. Пример скомпилировать не могу — среда ругается на отсутствующие пакеты org.gnome.gdk и org.gnome.gtk, указанные примере в качестве импортируемых.

Странно, у меня все из репов, конпеляция и запуск стандартный:

tmp % ls
classes/  src/  ExampleEditor.java  ExamplePressMe.java

tmp % javac -classpath /usr/share/java/gtk-4.0.jar -d classes ExampleEditor.java

tmp % java -classpath /usr/share/java/gtk-4.0.jar:classes sourceview.ExampleEditor

Используй убунту, а не устаревшие системы :)

a3
()
Ответ на: комментарий от Deleted

Ты предлагаешь написать ещё один или выбрать GTK? В любом из случаев твоё сообщение было проблемным, ибо толсто.

А что тут ужасного? Да, выбрать гтк.

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

>Как вы относитесь унификации Linux (и разработки тоже)?

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

One major IDE, One major toolkit, One major DE, One major distro, One major repository?

Чушь всё это. На всех не угодишь, поэтому это плохо.

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

>А что тут ужасного? Да, выбрать гтк.

Не выберут. я вот на этом писать не хочу и поэтому не выбирут.

не гтк не выбирут, а вообще чтото одно.

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

Список библиотек:

> ls /usr/local/share/java/classes
...
-r--r--r--  1 root  wheel    34K 14 фев 17:44 cairo1.0.jar
-r--r--r--  1 root  wheel    34K 14 фев 17:58 glade2.12.jar
-r--r--r--  1 root  wheel    25K 14 фев 17:39 glib0.4.jar
-r--r--r--  1 root  wheel    91K 14 фев 17:56 gnome2.12.jar
-r--r--r--  1 root  wheel   671K 14 фев 17:53 gtk2.10.jar
...
Что откуда поставилось:
> pkg_which /usr/local/share/java/classes/cairo1.0.jar
cairo-java-1.0.8_1
> pkg_which /usr/local/share/java/classes/glade2.12.jar 
libglade-java-2.12.8_4
> pkg_which /usr/local/share/java/classes/glib0.4.jar 
glib-java-0.4.2_2
> pkg_which /usr/local/share/java/classes/gnome2.12.jar 
libgnome-java-2.12.7_4
> pkg_which /usr/local/share/java/classes/gtk2.10.jar 
libgtk-java-2.10.2_4
Что внутри:
> unzip -l /usr/local/share/java/classes/cairo1.0.jar 
Archive:  /usr/local/share/java/classes/cairo1.0.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  02-14-2010 17:43   META-INF/
       68  02-14-2010 17:43   META-INF/MANIFEST.MF
     3110  02-14-2010 17:43   org/freedesktop/cairo/Status.class
     1323  02-14-2010 17:43   org/freedesktop/cairo/SurfacePattern.class
     2058  02-14-2010 17:43   org/freedesktop/cairo/Surface.class
     1229  02-14-2010 17:43   org/freedesktop/cairo/FillRule.class
     1231  02-14-2010 17:43   org/freedesktop/cairo/FontWeight.class
      352  02-14-2010 17:43   org/freedesktop/cairo/LinearGradient.class
...
     2893  02-14-2010 17:43   org/freedesktop/cairo/FontOptions.class
     1521  02-14-2010 17:43   org/freedesktop/cairo/SubpixelOrder.class
---------                     -------
    61489                     37 files
> unzip -l /usr/local/share/java/classes/glade2.12.jar 
Archive:  /usr/local/share/java/classes/glade2.12.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  02-14-2010 17:58   META-INF/
       68  02-14-2010 17:58   META-INF/MANIFEST.MF
      748  02-14-2010 17:58   org/gnu/glade/TreeModelDelegate.class
      743  02-14-2010 17:58   org/gnu/glade/TreeViewDelegate.class
...
     8307  02-14-2010 17:58   org/gnu/glade/ListenerDelegate.class
      614  02-14-2010 17:58   org/gnu/glade/TextBufferDelegate.class
---------                     -------
    49503                     50 files
> unzip -l /usr/local/share/java/classes/glib0.4.jar 
Archive:  /usr/local/share/java/classes/glib0.4.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  02-14-2010 17:39   META-INF/
       68  02-14-2010 17:39   META-INF/MANIFEST.MF
     1114  02-14-2010 17:39   org/gnu/glib/Struct.class
...
     3745  02-14-2010 17:39   org/gnu/glib/EventMap.class
     3792  02-14-2010 17:39   org/gnu/glib/Value.class
---------                     -------
    44499                     30 files
> unzip -l /usr/local/share/java/classes/gnome2.12.jar 
Archive:  /usr/local/share/java/classes/gnome2.12.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  02-14-2010 17:55   META-INF/
       68  02-14-2010 17:55   META-INF/MANIFEST.MF
     4308  02-14-2010 17:55   org/gnu/gnome/IconEntry.class
     1545  02-14-2010 17:54   org/gnu/gnome/PreferencesType.class
     2004  02-14-2010 17:55   org/gnu/gnome/PasswordDialog.class
...
     2565  02-14-2010 17:54   org/gnu/gnome/CanvasRect.class
      740  02-14-2010 17:55   org/gnu/gnome/Sound.class
---------                     -------
   180691                     96 files
> unzip -l /usr/local/share/java/classes/gtk2.10.jar
Archive:  /usr/local/share/java/classes/gtk2.10.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  02-14-2010 17:48   META-INF/
       68  02-14-2010 17:48   META-INF/MANIFEST.MF
     4147  02-14-2010 17:44   org/gnu/atk/StateType.class
     2151  02-14-2010 17:44   org/gnu/atk/Relation.class
     2741  02-14-2010 17:44   org/gnu/atk/RelationType.class
     1506  02-14-2010 17:44   org/gnu/atk/Hyperlink.class
     1987  02-14-2010 17:44   org/gnu/atk/RelationSet.class
     8062  02-14-2010 17:44   org/gnu/atk/Role.class
     1739  02-14-2010 17:44   org/gnu/atk/StateSet.class
     3864  02-14-2010 17:44   org/gnu/atk/AtkObject.class
      683  02-14-2010 17:44   org/gnu/atk/State.class
     1880  02-14-2010 17:44   org/gnu/atk/Layer.class
     1058  02-14-2010 17:44   org/gnu/atk/ObjectFactory.class
     1321  02-14-2010 17:44   org/gnu/atk/Registry.class
     1394  02-14-2010 17:44   org/gnu/pango/AttrIterator.class
     2102  02-14-2010 17:44   org/gnu/pango/FontMask.class
     1441  02-14-2010 17:44   org/gnu/pango/Variant.class
     1399  02-14-2010 17:44   org/gnu/pango/FontMetrics.class
     1518  02-14-2010 17:44   org/gnu/pango/WrapMode.class
      286  02-14-2010 17:48   org/gnu/gtk/TreeViewColumnDrop.class
     1974  02-14-2010 17:47   org/gnu/gtk/Paned.class
     2455  02-14-2010 17:45   org/gnu/gtk/Style.class
     1519  02-14-2010 17:45   org/gnu/gtk/AccelFlags.class
     1163  02-14-2010 17:47   org/gnu/gtk/Ruler.class
     1595  02-14-2010 17:47   org/gnu/gtk/IconLookupFlags.class
     3344  02-14-2010 17:48   org/gnu/gtk/TreeModelSort.class
    12351  02-14-2010 17:45   org/gnu/gtk/Window.class
...
     1548  02-14-2010 17:47   org/gnu/gtk/SideType.class
      219  02-14-2010 17:45   org/gnu/gtk/event/CalendarListener.class
      467  02-14-2010 17:45   org/gnu/gtk/event/EndDragEvent$Type.class
      211  02-14-2010 17:45   org/gnu/gtk/event/ActionListener.class
      539  02-14-2010 17:45   org/gnu/gtk/event/DialogEvent$Type.class
      484  02-14-2010 17:46   org/gnu/gtk/event/SpinEvent$Type.class
      675  02-14-2010 17:45   org/gnu/gtk/event/FocusEvent.class
      674  02-14-2010 17:46   org/gnu/gtk/event/FileChooserEvent.class
     1214  02-14-2010 17:45   org/gnu/gtk/event/GtkEvent.class
      239  02-14-2010 17:46   org/gnu/gtk/event/CheckMenuItemListener.class
...
     1775  02-14-2010 17:45   org/gnu/gdk/NotifyType.class
     1742  02-14-2010 17:44   org/gnu/gdk/GrabStatus.class
     2182  02-14-2010 17:45   org/gnu/glib/CustomEvents.class
---------                     -------
  1342142                     614 files
— везде, не считая Cairo, префикс «org.gnu.».

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

Просто потому, что не перейдут. Положат болт и продолжат писать на Qt. Да ещё и воя будет потом на 5 лет вперёд.

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