Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

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

Обратите внимание, что QT упоминается как:

  

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

в то время как GTK + упоминается как:

  

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

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

Прежде всего, вы можете использовать Gtk + из C. Qt - только C ++.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top