Должен ли я изучать GTK + или GTKMM? - PullRequest
9 голосов
/ 15 марта 2009

Я программист на C #, который начал использовать Ubuntu около 2 лет назад. Я хочу изучать программирование GUI на C или C ++. Я не очень люблю моно, это приводит к сбою в моей системе. У меня есть базовое понимание C ++. Я никогда не работал в Си, но это выглядит круто. Какой инструментарий я должен изучить / использовать? Дайте за / против каждого. Спасибо!

Ответы [ 7 ]

32 голосов
/ 16 марта 2009

Меня могут обвинить в предвзятости, поскольку я помогаю вносить вклад в gtkmm, но сначала я был пользователем, так что ... В любом случае, я очень рекомендую gtkmm, если вы знакомы с C ++. С помощью gtkmm управление памятью намного проще, чем с GTK +, поскольку объекты с подсчетом ссылок управляются автоматически с помощью интеллектуальных указателей. Вы также можете создавать экземпляры объектов как автоматические переменные (например, в стеке), и их время жизни определяется их областью действия. Так что на практике гораздо проще избежать утечек памяти с помощью gtkmm, чем с GTK +.

Другим огромным преимуществом gtkmm перед GTK + (на мой взгляд) является использование структуры типов сигналов безопасности. В GTK + вам постоянно нужно передавать вещи как пустые указатели, а затем приводить их к тому типу, который, как вы думаете, должен быть. В gtkmm вам не нужно этого делать, и вы можете воспользоваться преимуществами компилятора, обеспечивающего безопасность типов в ваших обработчиках сигналов.

Еще одним большим преимуществом по сравнению с C / GTK + является простота создания новых классов. В GTK + вам нужно написать много стандартного кода и, в основном, заново реализовать вещи, которые вы получаете бесплатно в C ++ как часть языка (например, наследование, конструкторы, деструкторы и т. Д.). Это более утомительно и подвержено ошибкам.

Greyfade упомянул, что gtkmm неполна, и он в некоторой степени прав - gtkmm не охватывает абсолютно все в GTK + API (хотя он очень близко подходит). Но на практике это не проблема, потому что вы всегда можете использовать API C / GTK + непосредственно из своего кода gtkmm. Эта совместимость с C является огромным преимуществом C ++ перед чем-то вроде привязок C # или python, где у вас не будет альтернатив, если привязка не покрывает часть API.

Единственными реальными причинами выбора GTK + вместо gtkmm (IMO) является то, что у gtkmm есть небольшие дополнительные издержки, поскольку это оболочка над библиотекой C (но обычно это всего лишь один вызов функции, который будет незначительное влияние), или если вы ненавидите или не можете использовать C ++.

17 голосов
/ 16 марта 2009

Если вы программист на C #, почему бы вам не взглянуть на Vala ?

Я использую pygtk для большинства моих приложений с графическим интерфейсом Linux, но Python был слишком медленным для проекта, над которым я сейчас работаю, поэтому я пытался выбрать один из GTK + и GTKmm. Потом я встретил Валу.

Это довольно новый язык, и поэтому документация в настоящее время довольно ограничена, но я думаю, что он имеет лучшее из обоих миров: синтаксис C # со скоростью C.

12 голосов
/ 15 марта 2009

Поскольку C ++ вам более знаком, вы можете найти GTKmm более подходящим, поскольку вы можете использовать такие идиомы, как RAII. К сожалению, GTKmm немного неполон и в нем отсутствуют некоторые менее используемые части GTK.

GTK + сам по себе, однако, по существу, предоставляет объектную модель, похожую на ту, что вы найдете в C ++, но только с функциями C. Такие вещи, как конструирование и разрушение в C ++, выполняются явно в C API, а экземпляры виджетов обрабатываются исключительно с помощью указателей.

Попробуйте оба варианта и посмотрите, какой из них лучше подходит вашему проекту.

4 голосов
/ 02 ноября 2011

Как уже говорили многие, Gtkmm обеспечивает хорошее управление памятью, подсчет ссылок и т. Д. Однако в одном отделе он падает. Документация. Весь проект Gtkmm страдает от явления «недокументирования», когда размещенная (и размещенная на сторонних сайтах) документация представляет собой просто сканирование javadoc заголовочных файлов.

Просто хотел, чтобы вы знали, во что вы ввязываетесь. Например, Scrolled Window является одним из лучших документированных классов в Gtkmm.

4 голосов
/ 05 апреля 2009

Я бы предложил выучить Вала с гедитом.

http://www.valaide.org/doku.php: Вала

https://launchpad.net/valable: затмение

http://code.google.com/p/vtg/: Gedit

http://abderrahim.arablug.org/blog/: анюта

2 голосов
/ 12 декабря 2010

Я думаю, что лучший путь - это сначала изучить gtkmm! После того, как вы закончите с основами gtkmm, GTK + должен быть довольно простым для изучения (при условии, что вы знаете C и знакомы с указателями).

Если вы не знаете C, вы можете быстро выучить его, прочитав «Язык программирования C» Денниса Ритчи

Я рекомендую вам сначала изучить gtkmm, потому что он специально разработан для C ++, который в некоторой степени похож на C #, поскольку оба ориентированы на объекты, поэтому сначала освоить gtkmm будет относительно легко, чем GTK +.

После gtkmm вы можете перейти к GTK +

Большинство компаний с открытым исходным кодом используют GTK +, а не gtkmm, поэтому GTK + стоит изучить!

2 голосов
/ 15 марта 2009

Вы смотрели на QT?
Это хороший C ++ дизайн, кроссплатформенность и LGPL

...