Каковы плюсы и минусы В C++ Qt vs Eclipse RCP для кросс-платформенной разработки GUI?
Я собираюсь разработать новый GUI для существующего приложения c++. Приложение работает на Windows и Linux, а связь с GUI осуществляется через клиент/сервер.
каковы плюсы и минусы между Eclipse RCP и Qt?
2 ответов
некоторые плюсы Qt:
- С++ вещи обычно лучше, но это спорно.
- Qt является основой Meego,мобильной платформы спонсируется Intel, AMD и другими; однако его текущий импульс кажется мне не слишком высоким. Это означает, что вы также можете создавать приложения для различных мобильных и встроенных устройств, как правило,
- существует много приложений на основе Qt.
- у него есть WYSIWYG дизайнер.
- хорошо для малых и больших проектов, особенно из-за QtQuick, который позволяет создавать небольшие приложения в кратчайшие сроки и с почти нулевыми знаниями о c++
- Qt имеет удивительную оболочку в Python под названием PyQt (есть также PySide, конечно), которая позволяет быстро разрабатывать и гладкое прототипирование. Из-за этого люди часто используют PyQt (или PySide) для UI-стороны приложения Qt. Конечно, вы можете легко комбинировать Python и Qt в то же приложение, используя все свои сильные стороны (но и слабые стороны). Это позволяет относительно быстро и плавно разрабатывать циклы даже для крупных проектов
некоторые минусы Qt:
- код приложений на основе Qt использовать некоторых элементов, которые не являются частью C++, которые должны быть преобразованы в C++ специальным препроцессором под названием moc (компилятор Метаобъектов) до фактической компиляции. Вы и ваш система сборки должна учитывать это.
- Nokia (бывший владелец Qt, так как он приобрел Trollech) и продал его Digia. Однако это делает не подразумевается их участие в разработке открытого исходного кода Qt изменилось.
некоторые плюсы Eclipse RCP:
-
Eclipse RCP намного больше, чем графический инструментарий:
- Это спортивный плагин-архитектуре может помочь распределить функциональность между различными компонентами (плагинами) и сохранить контроль над зависимостями между такими компонентами (плагинами). Система плагинов Eclipse опирается на собственную реализацию спецификации Java component system под названием каталога.
- он предоставляет механизм для включения развязанной расширяемости приложения под названием точки расширения.
здесь многие затмения Плагины которые вы можете использовать в своем приложении, и многие из них имеют лицензии на распространение, дружественные к коммерческим продуктам.
у него есть WYSIWYG дизайнер.
некоторые минусы Eclipse RCP:
Eclipse использует пользовательский оконный инструментарий под названием SWT; на каждой платформе он опирается на собственный графический слой. В Linux он полагается на Gtk+ (хотя также можно использовать мотив), который по моему опыту (и другие!--7-->) имеет проблемы с производительностью, в основном с виджетами, которые обновляются с высокой скоростью. На самом деле многие из нас вставляют элементы Swing в приложения Eclipse RCP для преодоления проблем производительности, сохраняя расширяемую архитектуру Eclipse; это, однако, может принести проблемы интеграции. Существует версия SWT, которая использует Qt в качестве бэкэнда, но ее включение в кодовую базу Eclipse кажется застой с октября 2010 года.
время запуска (понимается как время, прошедшее с момента запуска приложения, пока оно не появится в окне) приложений Eclipse RCP может быть очень длинным.
если вы намерены интегрировать материал C++ С Java с помощью JNI, у помните, что некоторым людям это трудно.
Eclipse имеет много и много ошибок. в Eclipse в Bugzilla является очень полезным ресурсом для разработчика RCP.
чем больше вы хотите, чтобы внешний вид и поведение приложения Eclipse RCP отличались от Eclipse IDE, тем больше проблем вы получите.
Eclipse RCP development имеет большую кривую обучения, на мой взгляд.
использование Eclipse RCP для небольших проектов в основном самоубийство (если вы не ограничиваете себя только созданием плагина или подобный.) Он предназначен для средних и крупных и очень крупных проектов из-за сложности его инфраструктуры, потребностей в ресурсах и выше крутой кривой обучения.
- Eclipse RCP не для мобильной разработки, потому что...это RCP (Rich Client Platform). Если вы хотите стать мобильным, это не для вас.
обе их лицензии на распространение (LGPL/GPL / commercial для Qt, EPL для Eclipse) достаточно гибки для большинства применений, на мой взгляд. Тем не менее я не юрист, так что могу ошибаться.
и конечно, другие факторы, такие как опыт разработчиков, их технические навыки, размер команды, конкретные требования и т. д., должны быть приняты во внимание.
кстати, у меня много опыта в Eclipse RCP, но только теоретические знания на Qt, поэтому я могу быть предвзятым/ошибочным в своих заявлениях.
теперь, когда Qt имеет лицензию LGPL, я бы выбрал Qt в любой день недели над Eclipse RCP.
Я использовал оба для создания довольно сложных приложений.
поскольку вы можете использовать eclipse для разработки C++, я предполагаю, что мы сравниваем в основном swt/jface против Qt, а не саму среду разработки eclipse.
некоторые вещи, которые я заметил после использования как:
1) Qt имеет лучшую документацию и образцы
кроме некоторых наполовину испеченных примеров в Интернете, я мог найти мало полезной документации eclipse.
2) Qt имеет намного больше "профессиональных" пользователей
есть много профессиональных компаний, использующих Qt в качестве платформы пользовательского интерфейса. Учитывая поддержку трех платформ (Windows, Linux, Mac), она очень гибкая и имеет большую поддержку.
3) Qt имеет тенденцию быть более полным и зрелым -
используя Eclipse, я заметил, что довольно часто элементы управления и пакеты, которые были доступны, были выполнены только частично, а не полностью. Они обычно разрабатывались для чьего-то использования и только кодировались. Элементы управления Qt почти всегда были полной конструкцией.
4) укладка.
как Qt, так и Eclipse визуализируются с использованием локальных библиотек платформы, поэтому ваш пользовательский интерфейс будет "выглядеть" как другие UI на платформе, на которой вы работаете (т. е. Linux vs Windows). Однако Qt также предоставляет довольно сложную функциональность стиля, которая позволяет легко изменять внешний вид любого элемента управления и дает вам гораздо больше контроля над внешним видом вашего приложения.
с новым декларативным языком (Qt 4.7.* ) вы приближаетесь к уровню контроля WPF, который действительно потрясающий.
5) UI Designer:
Qt имеет гораздо более богатый дизайнер, который позволяет вам компоновать форму и выполнять базовое тестирование без компилировать любой код. Конструктор также предоставляет возможность добавлять взаимодействия между элементами управления в форме. Бывший. Нажмите эту кнопку - отключить эту опцию
Eclipse также имеет конструктор форм, хотя мой опыт работы с ним ограничен. Я пытался использовать его пару раз с очень ограниченным успехом. Наконец, я закодировал каждую форму вручную с помощью кода. Это больно.
6) взаимодействие с существующим исходным кодом
Если у вас нет этой проблемы, то вам очень повезло. Поскольку Qt основан на C++, он легко интегрируется с устаревшим кодом C и c++. Интегрировать Java и C непросто.
7) Библиотеки Для Рисования
Я попытался кодировать некоторые рисованные фигуры с помощью библиотек swt и был вынужден обойти большие части библиотеки рисования swt из-за комка, который был там. Использование Qt для чего-то подобного не было проблемой вообще.
8) дерево и список моделей
Eclipse предоставляет некоторые приятные функции из коробки для распространения данных в деревья, списки и вещи. Это почти так же хорошо в Qt, хотя немного сложнее в настройке.
9) Макет Приложения
Eclipse предоставляет некоторые приятные функции для управления "view" (dock panels) и "perspectives" (workflows), которые, если вы решите их использовать, сделают жизнь приятной и легкой. Qt требует, чтобы вы сделали это сами. Qt имеет функциональность док-панели, но при создании богатого приложения вы должны настроить это самостоятельно.
Дополнительное Примечание:
Qt также предоставила некоторые дополнительные библиотеки для поддержки таких вещей, как xml и т. д... Таким образом, это помогает немного сократить разрыв между c++ и java для таких вещей.