Qt4.5 vs Cocoa для встроенного пользовательского интерфейса Mac
Я занимаюсь разработкой для Windows и * nix платформ в течение довольно долгого времени, и я хочу перейти в разработку Mac. Я подбрасываю между использованием ObjC/ Cocoa и С++/Qt4.5.
Семантика С++/moc имеет для меня больше смысла, и улучшение знаний в Qt кажется разумным, потому что вы получаете набор навыков, который охватывает больше платформ.
Возможно, я ограничу свои приложения, пропустив Cocoa?
Примеры приложений Qt выглядят довольно родными для Mac, но они довольно просты, поэтому потенциально не рассказывают всю историю. Существуют ли другие профи к способу Xcode, который не имеет Qt, например, упаковка, развертывание и т.д.?
Ответы
Ответ 1
Вот простой способ ответить на него:
Если вы разрабатывали приложение Windows с .NET или MFC, не могли бы вы ограничить ваши приложения с помощью Qt? Если ответ на этот вопрос будет да, то ситуация, вероятно, будет одинаковой на Mac.
Несколько негативов, которые я могу вспомнить с головы:
- Licensing
- Приложения Qt, в то время как хорошие, не являются полностью родным опытом пользовательского интерфейса и там, что может сделать собственный конструктор пользовательского интерфейса в Cocoa, который пугает разум. Хотя я не могу быть уверен, что в Qt все те же функции недоступны, я сомневаюсь.
- Qt всегда немного отстает. Если Microsoft или Apple выйдут с отличной новой технологией, вам придется дождаться, когда разработчики Qt обновят Qt.
Однако, со всем сказанным, вы можете определить стоимость бизнеса при использовании Qt. Если вы считаете, что кросс-платформенная разработка станет важной частью вашего развития, то Qt может стоить того, несмотря на упомянутые проблемы.
Ответ 2
Спросите себя: сколько из лучших приложений Mac, которые вы знаете, используют Qt вместо native Cocoa?
Для наших роботизированных систем мы первоначально написали наше программное обеспечение управления на С++, используя кросс-платформенную библиотеку wxWidgets (мы избегали Qt из-за некоторых проблем с лицензированием), потому что мы чувствовали, что нам нужно ориентироваться на платформы Windows, Linux и Mac для наших конечных пользователей. Это то, что мы отправили в течение года, пока я не стал возиться с Cocoa.
Сразу же, что больше всего меня поразило, насколько быстро вы могли развиваться с помощью Cocoa. В конце концов, мы решили отказаться от поддержки Linux и Windows и переписать все наши приложения управления в Cocoa. Нам потребовались годы, чтобы собраться на С++ потребовалось всего три месяца, чтобы полностью переопределить в Cocoa.
Помимо проблем с интерфейсом "самый низкий общий знаменатель", о котором говорили другие, быстрое развитие, разрешенное Cocoa, стало конкурентным преимуществом для нашей компании. С момента нашего перехода на Cocoa наше программное обеспечение продвигалось намного быстрее, и это позволило нам стать новой компанией с одним разработчиком, который мог бы вытащить даже с 10-летними конкурентами, у которых есть команды разработчиков из 20 человек. Это, по-видимому, обычная история в области разработки Mac, где вы видите множество небольших команд, которые могут создавать продукты, которые конкурируют с более крупными компаниями.
Как последнее замечание, использование Cocoa дает вам возможность оставаться на вершине новых API. Apple постоянно развертывается. Теперь мы работаем над новым интерфейсом управления, который будет сильно использовать Core Animation, что было бы больно иметь дело с использованием Qt.
Ответ 3
В настоящее время я разрабатываю как QT (на самом деле PyQT, но это не имеет никакого значения для вашего вопроса) и родное приложение Cocoa. Для меня это не проблема, я выбрал Cocoa. Действительно стоит потратить время на изучение Cocoa в целом, есть много замечательных концепций в рамках Cocoa и Objective-C 2.0.
Ответ 4
Я бы использовал Qt, если вы хотите, чтобы это было кроссплатформенное приложение.
Ответ 5
Вы можете посмотреть класс QMacCocoaViewContainer
. Он действует как своего рода оболочка для общих представлений Cocoa, поэтому вы также можете иметь элементы Cocoa, которые официально не поддерживаются Qt.
Конечно, это означает немного узнать о Cocoa и Objective C и о том, как должен выглядеть пользовательский интерфейс Cocoa. Но если вы уже хорошо знаете Qt, и если это не похоже на ваше приложение, и только на графический интерфейс, это может быть хорошим способом.
И не забывайте о QMacStyle::WidgetSizePolicy
, иначе вы не поймете, почему ваши столы выходят настолько огромными.
Ответ 6
Очевидно, что лучший вариант - использовать кросс-платформенный пакет, поддерживающий собственные виджеты.
С QT4 вы можете создать свой базовый пользовательский интерфейс. Затем просто добавьте встроенную поддержку для вашей целевой целевой платформы.
Конечно, Cocoa имеет много причудливых вещей (и вы все равно можете использовать их через QT4), но позвольте мне быть ясными. Я вижу много причудливых приложений в AppStore, довольно, но большинство из них просто дерьмо, дорого.. что бы то ни было. Я действительно скучал по текстовому редактору Kate, моему закругленному зрителю, моему программному обеспечению рисования крита... они просто лучше коммерческих и дорогих альтернатив и бесплатны. поэтому я просто настраиваю исходный код, у которого тоже есть РЕАЛЬНЫЙ родной и большой опыт.
Что делать, если я должен использовать приложение linux на моем основном компьютере с mac os x? или окна? или что-то еще? только?
Например, почему мне приходится покупать дорогое, фантастическое, но гораздо менее популярное программное обеспечение для редактирования изображений для моего mac, например pixelmator, когда я могу использовать полнофункциональное программное обеспечение для обработки изображений, такое как Gimp? ДА Gimp - это gtk2, который является болью на любой платформе, особенно на Mac, потому что это действительно уродливо. Gimp следует портировать на QT4. Inkscape также следует портировать на QT4, и это будет так здорово.
Так просто сделать.. черт!
http://doc.qt.nokia.com/4.7-snapshot/demos-macmainwindow.html
Даже вы можете добавить поддержку новой полноэкранной функции на льду, унифицированного названия и меню панели инструментов и т.д.
Я, как пользователь, действительно забочусь о эффективных, отличных, хороших и кросс-платформенных приложениях, мне все равно, что разработчик не хочет или лени.
Ответ 7
Я занимаюсь кросс-платформенной разработкой (Mac, Windows, Linux), а для некоторых проектов используется Qt. Это прекрасная структура и предоставляет богатую библиотеку классов. Если вам нужно развертывать на нескольких платформах, вы не можете тратить время/усилия на интерфейсные платформы, или "общая" поддержка для каждой платформы достаточно хороша, а затем используйте Qt.
Однако Qt неизбежно страдает в некотором роде от синдрома самого низкого общего знаменателя, и иногда он не чувствует себя вполне достаточно родным. Существуют также некоторые функции, которые либо трудно поддерживать, либо просто не предоставляются в библиотеках Qt. Поэтому, если вы можете позволить себе время и силы, или ваше приложение действительно требует внимания к деталям, подходит и заканчивается, тогда разработка отдельных интерфейсов может стоить того.
В любом случае вы должны писать свой внутренний код (aka domain) в нейтральной нейтральной платформе и нейтральной стороне интерфейса. Таким образом, интерфейс легко заменяется или модифицируется между платформами.
Вы всегда можете начать с интерфейса Qt и быстро перейти на рынок, а затем разработать собственный интерфейс вниз.
На практике я заметил, что приложение Qt в Windows выглядит наиболее "родным", а на Mac есть некоторые тонкие контрольные признаки, которые заставляют его выглядеть/чувствовать себя не совсем правильно. И пользователи Mac, как правило, имеют гораздо более высокие надежды, когда дело доходит до UI/UX!
Ответ 8
После публикации этого вопроса я изучил способ Cocoa/Objective-C и был впечатлен. Несмотря на то, что я изначально считал довольно причудливым синтаксисом, Objc представляется очень эффективным языком для реализации кода пользовательского интерфейса, а сахара XCode - такие, как Core Data и привязки - делают короткую работу со всеми скучными битами.
Я провел некоторое время с примерами QT и документацией, прежде чем копаться в cocoa, и, как правило, согласен с тем, что было сказано выше, немного отставая от кривой и менее "aqua-ish" - хотя и от довольно тривиальной проверки, Если бы мне пришлось строить кросс-платформенное приложение, я бы, вероятно, использовал QT вместо того, чтобы пытаться отделить код пользовательского интерфейса, поскольку, похоже, он обеспечивал бы достаточно-достаточное количество визуальных эффектов, но только для mac-целей, Cocoa кажется как определенная победа.
Спасибо всем за ваши ответы, они все были очень полезны!
Ответ 9
В зависимости от того, какие приложения вы хотите написать, другим претендентом является REALbasic.
Переход с С++ довольно прост (у меня 15-летний опыт работы на С++), а среда и среда разработки очень продуктивны. У вас есть дополнительный бонус от возможности развертывания в Linux и Windows с тривиальными усилиями.
Большая причина для изучения Cocoa и кодирования в Objective-C - это то, что вы хотите отточить свои навыки iPhone или преследовать действительно причудливый пользовательский интерфейс. Если вы хотите соперничать с передовой разработкой WPF, я бы рекомендовал Cocoa.
Ответ 10
НЕ используйте Qt для Mac-приложения. Вы не получите аппаратного ускорения для 2D-рендеринга, и вы не сможете выполнить ADA-совместимость.