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

Создание соединений с базой данных является довольно дорогой операцией. Постоянные соединения являются хорошей идеей. В ASP.NET и мире Java, у нас есть "организация пула подключений", которая является примерно тем же самым, и также хорошей идеей.

18
задан Matthew 26 November 2009 в 01:34
поделиться

3 ответа

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

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

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

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

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

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

Насколько я помню, только объекты, которые устанавливают соединение, должны наследоваться от базового класса magic. Кроме того, поскольку слоты являются объектами, вы также можете использовать их в качестве очень хороших адаптируемых объектов-функторов.

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

Насколько я помню, только объекты, которые устанавливают соединение, должны наследоваться от базового класса magic. Кроме того, поскольку слоты являются объектами, вы также можете использовать их в качестве очень хороших адаптируемых объектов-функторов.

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

22
ответ дан 30 November 2019 в 07:03
поделиться

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

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 + упоминается как:

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

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

15
ответ дан 30 November 2019 в 07:03
поделиться

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

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

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

4
ответ дан 30 November 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: