Ответ 1
Я не могу говорить напрямую с Gtk +, но на моей предыдущей работе я использовал Gtkmm, и при моей текущей работе я использую Qt. Оба являются С++, поэтому в этом отношении они являются согласованными, но Gtkmm является/является только оболочкой для кода Gtk +, который находится в прямой C.
В то время, когда я переключал задания, я помню, что одним из основных отличий в коде Ui было то, как два инструментария обрабатывали макеты. Некоторые части я думал, что Gtk сделал лучше, некоторые, я думал, Qt сделал лучше. И пусть вы получите свои виджеты, где вы хотите их, в конце концов.
Отладка с помощью Gtkmm была немного больной, потому что классы вообще ничего не делали, кроме как удерживать указатель на структуру и вызывать функции Gtk+. Этот дополнительный уровень косвенности может быть раздражающим.
Qt имеет более вспомогательный код, который может быть полезен в различных настройках, по крайней мере, по сравнению с версией Gtkmm, которую я использовал. Все, что нужно сделать для потоковой передачи, межпроцессного общения и создания сетей, оценено, когда вам нужно добавить новое измерение в свою программу. У них также есть свои контейнеры, если вы хотите использовать их, которые, я думаю, имеют более чистый интерфейс, чем контейнеры STL, - но в конце концов они делают примерно то же самое, поэтому это небольшое преимущество.
Механизм сигнала/слота между Gtkmm и Qt отличается. Qt полагается на дополнительный шаг в процессе компиляции для генерации метаинформации, которую он использует для своих сигналов/слотов. Объект, использующий сигналы или слоты, должен наследовать от QObject, а наследование QObject должно быть первым, без структуры алмаза. Это затрудняет определение абстрактного интерфейса, который испускает сигнал, например. С положительной стороны они по сути знают о проблемах с потоками и при необходимости преобразуют соединение сигнал/слот в соединение, основанное на событиях. Gtkmm использует сигналы SigC, которые являются прямолинейными классами С++, и мне кажется, что они полезны в более широком спектре ситуаций. Также, как я помню, только объекты, которые создают соединение, должны наследовать от магического базового класса. Кроме того, поскольку слоты являются объектами, вы можете использовать их как очень красивые адаптируемые объекты-объекты.
Я уверен, что есть другие различия, но это то, что я помню сейчас. Имейте в виду, что мой последний опыт работы с Gtkmm был около 3 лет назад, поэтому некоторые из этих предметов, возможно, уже изменились.