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).


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

Только эти книга была написана когда не было GtkBuilder, там еще пишут о libglade, что является deprecated. Но вообщем это касается только одной главы. О GtkBuilder так и быть, прочитаете в документации

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

а зачем нужна винда? она тоже вроде никому не нужна, но живее всех живых. у проекта есть своя страничка, последний релиз датируется концом прошлого года, а последняя новость прошлым месяцом

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

Пишу тут простую морду к плееру, пока что проблем не было. Хотя есть ли ограничения лучше гуглить. В принципе, к рубям довольно удобно, массивы, строки Qt'шные автоматически преобразовываются к руби типам (и обратно), подключение слотов сигналов выглядит несколько чужеродно, разве что, но не смертельно. Сообщения об ошибках не всегда внятные выдаёт ещё, если где ошибёшься. В духе: не нашло функцию? В ошибке пишем что-то о превышении длины рекурсии. Неправильные параметры? Ненайдена функция и т.д.

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

Я пользуюсь rbuic4, который генерирует по .ui файлу руби код, который всё и создаёт (сам .ui не нужен). Встречалось в гугле также как .ui файла напрямую загружать, но это не так удобно было, помнится.

Вот например что генерируется: http://github.com/tenno-seremel/XSG/blob/f169861df71e657f89b39365a1ace761af8b...

из http://github.com/tenno-seremel/XSG/blob/f169861df71e657f89b39365a1ace761af8b...

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

для питона есть pyuic4, но можно и напрямую ui файл грузить также как и в плюсах

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

> бубном плясать, чтобы унаследовать Qt класс не в хедере

Сколько писал на qt с такой проблемой не сталкивался. moc'ом cpp'шник обрабатываешь и всё.

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

> Написав приложение, используя только Qt, например, для Linux-x86, его можно будет очень легко портировать под все остальные платформы.

Практически вообще не надо будет портировать, все заведется автоматом.

Из последних вещей, что nokia сделала - мне понравилось qtbrowserplugin — Qt'шный виджет поднимается внутри браузера (любого!) без лишнего геммороя. До такого функционала gtk как раком до китая.

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

Можно, но доступ к элементам полученной таким образом формы там как-то мне не понравился. Хотя я не помню уже что именно.

Deleted
()
Ответ на: комментарий от Reset
The  function  rand_r()  is  from
       POSIX.1-2001.  POSIX.1-2008 marks rand_r() as obsolete.

Некросссплатформенно.

Написать то свой ГСЧ не проблема, но странно, что в Qt его нет.

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

Явовского пакета org.gnome.gdk среди GNOME- и Gtk-биндингов не нашёл. Плохо искал?

Откуда его скачать можно?

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

>а редхат емнип гтк больше использует

но никому не навязывают, в томже RHEL идёт и гном и кде

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

>И там биндинг не столько к Qt, сколько к библиотекам KDE.
ты не прав. там 2 разных биндинга (Qyoto и Kimono)

На чистом Qt не знаю как получится писать или нет.

тоже интересно. Hello world запускался:)

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

>Ну РедХат был дейстительно лидирующей компанией. До поры до времени. На Убунту слезут почти все десктопы, и уже начинают слезать сервера (кажется Википедия на Убунту Сервер). Учитывая маркетинг и динамику развития году в 2018 где-то может случиться так, что в понимании пользователей будет Linux==Ubuntu.

Ты видать не понимаешь, что пользователи линукс - это не десктопы и веб-серверы, а прежде всего промыщленные системы высокой надёжности. Именно такие клиенты и интересуют крупные линукс компании. А они(клиенты) на свои серверы убунту никогда не поставят.

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

>у вас иллюзия, что Ubuntu и Kubuntu хоть в какой то мере равноправные

Это у Космонавта и канноникал иллюзия, а не у меня:)

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

>О них писал выше. Более того, они основа DE, который стоит в Ubuntu и с выходом GNOME 3 может реально сьесть весь рынок

ох уж эти гномовци.. ничего он не съест.

Но пользователи с радостью выбирают Gnome, что я вижу каждый день.

Ну КДЕ по всем опросам популярней. А главное - пользователи нахрен никому не нужны. Нужны стабильно работающие системы.

IT-шники уже перешли

Ты сильно заблуждаешься.

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

У Убунте там сразу в gtk.jar все есть. Если в ваших пакетах нет, качаем с оффсайта

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

Он не совсем уж мертв, просто полностью перестали финансировать. Отдали community

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

Они не верят в миф «легко настроить=нестабильно». Зохавает рынок серверов и промышленных систем еще как. Конечно debian не подвинет сильно, просто приемущества неочевидны, дебиан почти так же легко настраивается.

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

aptitude install libjava-gnome-java

Спасибо.

Список файлов пакета libjava-gnome-java в lenny для архитектуры amd64

/usr/lib/jni/libgtkjni-4.0.so

/usr/share/doc/libjava-gnome-java/NEWS.gz

/usr/share/doc/libjava-gnome-java/README.gz

/usr/share/doc/libjava-gnome-java/changelog.Debian.gz

/usr/share/doc/libjava-gnome-java/copyright

/usr/share/java/gtk-4.0.jar

/usr/share/java/gtk.jar

Нашёл исходники последней версии.

У меня на FreeBSD установлен порт libgnome-java 2.12.7_4. Однако:

GNOME_API_VERSION= 2.12

GTK_API_VERSION= 2.10

Вот полный состав файлов пакета — он пока ещё стар для того, чтобы вышеприведённый пример скомпилировался.

Так где, говорите, кросс-платформенность java-приложений с биндингами? Нету её. Всё руками нужно собирать — хоть с SWT, хоть с GNOME/Gtk. Один Swing кросс-платформенный.

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

> Ну КДЕ по всем опросам популярней.

Внимательно читаем новости

А главное - пользователи нахрен никому не нужны. Нужны стабильно работающие системы.

Ну на серверах ни Gnome ни KDE нету

Ты сильно заблуждаешься.

Кого ни спрошу, все компании на Линуксе, в универе ставят, студенты лабы пишут. Ситуация по сравнению с 2000 кардинально изменилась.

Что в поезд не сяду, так как минимум один линуксоид со мной в купе )) Просто еду в воскресенье, так все студенты в столицу на учебу.

Все что нужно разрабатывать, пишу под Линукс. В универе 2 годы лабы только на Линукс. Даже по .NET, и то на Моно с поощрением со стороны преподавателей. Предметы начинтаются с фразы «Для выполнения лабораторных работ, вам необходимо будет установить любой дистрибутив ОС Linux...». Прямо на кафедре открываются дополнительные лекции по Линукс-разработке от реальных спецов из киевских компаний.

Короче локальный вендокапец.

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

Ну приложение ведь не надо пересобирать. Просто это проблема мейнтейнеров пакетов в конкретном пакете

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

Для порта libgtk-java 2.10.2_4, от которого зависит libgnome-java 2.12.7_4, список устанавливаемых файлов такой:

include/libgtk-java/gtk_java.h

lib/libgtkjni-%%GTK_API_VERSION%%.so

lib/libgtkjni-%%GTK_API_VERSION%%.so.1

libdata/pkgconfig/gtk2-java.pc

share/java/classes/gtk%%GTK_API_VERSION%%.jar

%%DATADIR%%/macros/jg_gnome_java.m4

%%DATADIR%%/macros/jg_gtk_java.m4

@dirrm %%DATADIR%%/macros

@dirrm %%DATADIR%%

@dirrm include/libgtk-java

В 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, указанные примере в качестве импортируемых.

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

Нет. Это не проблема мантейнеров. У биндингов проблема со стабильностью API.

В новой версии биндинга (v.4.x) пространство имён поменялось. А это значит что старые программы на Java, использующие GNOME/Gtk-биндинги, придётся переписывать.

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

Ну по идее не должно, у gtk API безболезненно меняется, так что такое по идее не должно повториться. Хотя проект таки еще не устоявшийся, даже tutorials не осилили сделать. Я вот думаю заняться. Как вы думаете, чтобы не проявлять фантазию, нормально будет с Mono и Vala взять?

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

> /usr/local/share/java/classes/gtk-2.10.jar

Они нумеруют по версии самого Gtk, я так понял? Очень старовато... Не рекомендую. Соберите с исходников.

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

>Зохавает рынок серверов и __промышленных систем__ еще как.

В Ubuntu слишком новые ядра и софт, производители железа просто на них не оринтируются. Настраивается даже гента легко, проблема не в этом. Найди мне драйверы для PC-104 железа под 2.6.31?

Я _за_ убунту. На ноуте кубунту. Но на работе никаких (к)убунт:)

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

>Что в поезд не сяду, так как минимум один линуксоид со мной в купе ))

Тебе просто везёт:)

Ну на серверах ни Gnome ни KDE нету

Серверы это не только веб:)

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

> Я _за_ убунту. На ноуте кубунту.

Как вы относитесь в вероятному возникновению Ubuntu, как платформы разработки со своим IDE и API?

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

Такая вероятность близка к нулю.

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

Это конечно не известно. Но quickly уже делают, сюда еще и Ground Control. Canonical как бы намекает

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

А если задать более мягкий вопрос? Пускай не Ubuntu и не Canonical.

Как вы относитесь унификации Linux (и разработки тоже)? One major IDE, One major toolkit, One major DE, One major distro, One major repository?

One major programming language я исключил, это ужасно.

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