С++/Qt против Adobe AIR

Я должен выбрать платформу для нашего продукта. Я должен решить между Qt Framework и Adobe AIR. Я хорошо разбираюсь в Qt, поскольку я работал последние два года. Я посмотрел на сайт Adobe, но вся информация о flex, flash, способность кодирования в HTML/ActionScript является подавляющей и запутанной. Я не могу понять следующее о экосистеме Adobe.

У меня есть следующие вопросы в Adobe AIR:

  • Какой язык я использую для кодирования моего приложения? (не только определение внешнего вида пользовательского интерфейса) Как и в Qt, я использую С++. Это Actioncript?

  • Можно ли сказать, что AIR предназначен только для создания пользовательского интерфейса для приложений.

  • Где находится документ для классов полезности вместе с AIR? например http://qt-project.org/doc/ для Qt

  • Qt поставляется с огромным набором готовых виджетов, которые можно использовать. Подходит ли Adobe к такому набору виджета, и если да, то где я могу его увидеть как в URL-адресе?

  • Я понимаю, что flex SDK является открытым исходным кодом. Могу ли я создавать коммерческие приложения и отправлять их? Содержит ли flex SDK все (компилятор, служебные классы/виджеты)

  • Сколько стоит AIR с точки зрения лицензирования?

  • Есть ли что-то в AIR, что эквивалентно QGraphicsView QT?

7 ответов

Если вам нужно получить доступ к множеству родных библиотек, вам нужно будет оставаться в пределах вашей среды QT. Имейте в виду, что AIR является однопоточным и запускается на Flash Player (то, что первоначально предназначалось для анимации на основе фреймов). Однако, в зависимости от стиля приложения, которое вы создаете, AIR может подойти вам просто отлично.

Остерегайтесь того, что AIR может запутаться, потому что существует несколько различных путей разработчика для создания приложений AIR: 1) использование html/javascript и AIR SDK, 2) с использованием Flash/Actionscript и 3) с использованием Flex SDK и/или Flex-строителя. Последний из них является наиболее способным, исходя из традиционного фона рабочего стола.

Маленькие приложения, которые являются Web 2.0 для подключения к веб-сервисам, являются хорошими кандидатами для приложений AIR. Такие вещи, как IM-клиент Digsby, были бы замечательными. Мое любимое приложение AIR, которое я видел до сих пор, это Basamiq Mockups. Другими полезными приложениями являются TweetDeck. Это хорошие примеры типов вещей, которые хорошо подходят для решения AIR.

Вы должны посетить Adobe Showcase и посмотреть на некоторые приложения: http://www.adobe.com/products/air/showcase/

Кроме того, если вы хотите просто выйти из игры на С++, я считаю, что QT теперь имеет некоторые привязки java... также я помню некоторые привязки python, но никогда не смотрю на них.

Что касается QGraphicsView, люди сделали подобные вещи в Flex. Я попробовал Googling прямо сейчас, но не смог найти их изначально, но люди использовали такие вещи, как "Большое изображение", а затем отображали только текущую область в окне. Кроме того, в следующей версии Flex они активно создают официальный компонент ViewPort: http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Viewport


Потратьте некоторое время на это приложение AIR, а затем спросите себя, стоит ли Adobe Flex и AIR инвестировать ваше время в освоение (будьте готовы спросить себя, почему нечто подобное не существует для подобных С++/QT):

Tour de Flex

Tour de Flex - настольное приложение для изучения возможностей Flex и ресурсов, включая основной Flex компоненты, Adobe AIR и данные интеграции, а также различные сторонние компоненты, эффекты, скинов и т.д.

Некоторые из ваших вопросов:

  • Flex может быть закодирован в MXML и ActionScript3. AIR дополнительно поддерживает HTML/DOM/JavaScript программирование, так как движок HTML-рендеринга webkit встроен в среда выполнения AIR.
  • MXML - это декларативная DSL-запись XML, которая скомпилируется в ActionScript3 императивный код. Это неплохо, хотя для декларативного кодирования графические формы пользовательского интерфейса (т.е. представления шаблона MVC).
  • ActionScript3 имеет heratige, который основанный на JavaScript, но он имеет был доведен до степени, что это больше напоминает Java или С#. У него есть пакет пространства имен, классы и интерфейсы с наследованием, член класса ключевые слова защиты доступа, конструкторы, статические элементы и некоторые очень приятные дополнения по Java: свойства, события, привязка данных, и закрытия.

Программирование стиля Flex также является однопоточной моделью, которая опирается на асинхронные взаимодействия ввода-вывода. Это более простая модель для программирования, чем многопоточные приложения Java Swing или С#.NET Winform, но позволяет достичь тех же чистых результатов поведения программы. Я подробно расскажу об этом здесь:

Flex Async I/O vs Java и С# Explicit Threading


Flex - это с открытым исходным кодом, вы можете бесплатно скачать SDK, никаких связанных с ним лицензионных расходов. (см. FAQ)

Они отправляют "flex builder", который является некоторым обычным Eclipse, я думаю, и который стоит денег, но вы можете отлично работать без него.

Документы можно найти на страницах adobe livedoc. (который для некоторых, достаточная причина сама по себе не нравится Adobe;))

Я действительно удивляюсь, если вы хорошо разбираетесь в QT, почему вы рассматриваете что-то еще? Какие преимущества вы ожидаете от AIR, чтобы дать вам QT?

У меня есть опыт работы как с QT, так и с Flex, но не настолько, чтобы весить один против другого. Я знаю, что QT/С++ намного, намного более зрелый, чем Flex/ActionScript.

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


Я использовал QT и Flex (не столько сам Air), либо обнаружил, что Flex быстрее запускает и запускает приложения, а также изменяет, в то время как QT дает вам больше контроля - особенно в установщике. Установщик приложений Air довольно неудобен, или, по крайней мере, это было, когда я его пробовал, хотя с тех пор он может быть улучшен.

Большим преимуществом Air является то, что большая часть кода для него может быть запущена во Flash внутри веб-страниц. Вы не можете получить доступ к локальной файловой системе и т.д. Из Интернета по соображениям безопасности, но практически все остальное переносимо.


Я сделал противоположный ход. Я начал работать над материалом Adobe и перешел в QT. Основная причина для этого заключалась в ограничении среды Adobe. Когда вы используете материалы Adobe, вы ограничены инструментами, которые они производят, трудно представить внешние фреймворки или библиотеки, если вы не можете делать то, что хотите, с помощью материалов Adobe. Как правило, решение для этого - использовать сокеты, которые преобразуют предполагаемое "автономное" приложение в архитектуру клиент-сервер. Кроме того, если вы используете много внешних материалов, может быть сложно управлять множеством разных клиентов. Используя QT, вы можете кодировать на С++ и добавлять любые внешние рамки или lib, которые вы хотите. Несмотря на то, что некорректно кодировать его, иногда невозможно выполнить и без "странной" архитектуры системы.


Если вы ищете примеры "веселых" пользовательских интерфейсов, использующих Qt и SVG, взгляните на проекты KDEGames [1] [2] и KDEEdu [3] [4]. Там много приятного кода, который использует QGraphicsView и SVG для создания масштабируемых интерфейсов. Конечно, обратите внимание, что это GPL, поэтому будьте осторожны, что вы "занимаете", если ваше приложение не является.

[1] http://games.kde.org/

[2] http://websvn.kde.org/trunk/KDE/kdegames/

[3] http://edu.kde.org/

[4] http://websvn.kde.org/trunk/KDE/kdeedu/


Я напишу второй комментарий @Pieter - если вы уже знаете QT, переход в совершенно новую среду будет намного длиннее.

QT имеет преимущество кросс-платформенного и очень зрелого: есть библиотеки для Windows, Linux и Mac OS X. Я не очень знаком с AIR, не зная об этом от Adobe, но сайт продукта кажется укажите, что это для богатых интернет-приложений (http://www.adobe.com/products/air/). Если это правда, то QT будет гораздо лучшим выбором, если вы разрабатываете настольное приложение.

licensed under cc by-sa 3.0 with attribution.