Вопрос

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

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

Решение

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

Однако

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

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

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

Меня могут обвинить в предвзятости, поскольку я помогаю вносить вклад в 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 ++.

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

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

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

Я бы посоветовал научиться вала с помощью гедита.

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

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

http://code.google.com/p/vtg/ :Гедит

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

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

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

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

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

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

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

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

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

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