Каковы различия между Gtk + и Qt?

У многих людей есть мнение о том, что лучше. Я действительно не прошу об этом мнениях, я хотел бы узнать подробности: что делает один графический инструментарий отличным от другого, и какое из этих различий имеет Qt и Gtk +?

Ответ 1

Я не могу говорить напрямую с Gtk +, но на моей предыдущей работе я использовал Gtkmm, и при моей текущей работе я использую Qt. Оба являются С++, поэтому в этом отношении они являются согласованными, но Gtkmm является/является только оболочкой для кода Gtk +, который находится в прямой C.

В то время, когда я переключал задания, я помню, что одним из основных отличий в коде Ui было то, как два инструментария обрабатывали макеты. Некоторые части я думал, что Gtk сделал лучше, некоторые, я думал, Qt сделал лучше. И пусть вы получите свои виджеты, где вы хотите их, в конце концов.

Отладка с помощью Gtkmm была немного больной, потому что классы вообще ничего не делали, кроме как удерживать указатель на структуру и вызывать функции Gtk+. Этот дополнительный уровень косвенности может быть раздражающим.

Qt имеет более вспомогательный код, который может быть полезен в различных настройках, по крайней мере, по сравнению с версией Gtkmm, которую я использовал. Все, что нужно сделать для потоковой передачи, межпроцессного общения и создания сетей, оценено, когда вам нужно добавить новое измерение в свою программу. У них также есть свои контейнеры, если вы хотите использовать их, которые, я думаю, имеют более чистый интерфейс, чем контейнеры STL, - но в конце концов они делают примерно то же самое, поэтому это небольшое преимущество.

Механизм сигнала/слота между Gtkmm и Qt отличается. Qt полагается на дополнительный шаг в процессе компиляции для генерации метаинформации, которую он использует для своих сигналов/слотов. Объект, использующий сигналы или слоты, должен наследовать от QObject, а наследование QObject должно быть первым, без структуры алмаза. Это затрудняет определение абстрактного интерфейса, который испускает сигнал, например. С положительной стороны они по сути знают о проблемах с потоками и при необходимости преобразуют соединение сигнал/слот в соединение, основанное на событиях. Gtkmm использует сигналы SigC, которые являются прямолинейными классами С++, и мне кажется, что они полезны в более широком спектре ситуаций. Также, как я помню, только объекты, которые создают соединение, должны наследовать от магического базового класса. Кроме того, поскольку слоты являются объектами, вы можете использовать их как очень красивые адаптируемые объекты-объекты.

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

Ответ 2

Чтобы понять различия, лучше всего понять историю.

QT был разработан как пользовательский интерфейс и имел некоторые проблемы с лицензированием в начале, когда KDE сначала начал разрабатываться. KDE выбрал QT, поскольку тогда было немного выбора (Motif, Tcl/Tk, чтобы назвать несколько)

GIMP начал разрабатываться, и в то время, когда инструменты Window Toolkits не дошли до нуля, для чего нужны разработчики, поэтому они начали писать набор инструментов Gimp (GTK). Через некоторое время было решено переписать GTK и сделать его Object Orientated (GTK +).

Также в это время из-за возможных проблем с лицензированием QT Gnome был запущен и решил использовать библиотеку GTK +.

Теперь, если вы посмотрите QT Design и GTK Design в Википедии, вы можете начать видеть некоторые различия между системами.

Обратите внимание, что QT называется:

межплатформенная платформа разработки приложений

в то время как GTK + называется:

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

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

Ответ 3

В первую очередь, вы можете использовать Gtk + из C. Qt - только С++.

Кроме того, приложения Gtk + имеют диалоги, которые постоянно изменяются с помощью кнопки закрытия. Qt имеет тенденцию идти по линиям Ok/Apply/Cancel. Я не знаю, насколько это выполняется на уровне инструментария.

Что касается программирования, я не знаю, какой механизм обратного вызова использует Gtk, но механизм Qt сигналов-слотов абсолютно скалы.