Написание кроссплатформенного приложения со сложным графическим интерфейсом

Я хотел бы разработать приложение со сложным графическим интерфейсом (поле со списком с анимацией, диаграммы со сплайнами, прозрачные слои и т. д.). У меня хороший опыт работы с C# 2.0 и я изучаю WPF, но читал, что, к сожалению, нет планов портировать WPF на Mono.

  • Если я придерживаюсь C# и создаю собственные элементы управления графическим интерфейсом с помощью OpenGL (через OpenTK), я чувствую, что это будет тяжелая работа (интеграция с GTK#, отладка, трудно использовать для разработки форм).

  • Я могу использовать Java (с JOGL), но я не очень хорошо разбираюсь в этом и не знаю о проблемах с производительностью.

  • Последний вариант — C++, но мне нужно сделать большую переработку (годы с тех пор, как я последний раз использовал его), и мне сложно разрабатывать графический интерфейс и переносимые приложения на C++. . (Возможно, я ошибаюсь! Тем не менее, я очень боюсь разрабатывать такое сложное приложение на этом языке.)

Каков ваш совет? Что мне лучше выбрать: C# + OpenTK, Java + JOGL или вернуться к C++?


person Kill KRT    schedule 10.07.2010    source источник
comment
В ваших требованиях указано, что вам нужно разрабатывать для нескольких платформ?   -  person TheGeekYouNeed    schedule 10.07.2010
comment
Gtk# доступен как в экосистеме Mono, так и в экосистеме MS — есть ли с этим проблемы?   -  person Georg Fritzsche    schedule 10.07.2010
comment
Более простым (sic) и наиболее мощным вариантом было бы использование Qt.   -  person anno    schedule 10.07.2010


Ответы (8)


Я бы пошел с Qt. Взгляните на http://qt.nokia.com/products/ . Если вы боитесь C++ (но причин бояться его нет), вы можете попробовать Java Swing. Я думаю, что это лучшие варианты для разработки многоплатформенного настольного графического интерфейса.

person Aleksandar Vucetic    schedule 10.07.2010
comment
Я хотел бы разработать новые пользовательские элементы управления, подобные этому: dev.blender.ir/images/, и мне нужно сложное управление временной шкалой/отслеживанием, например: synthtopia.com/content/wp-content/uploads/2007/06/ Swing или Qt могут мне помочь? - person Kill KRT; 10.07.2010
comment
Qt позволяет — поощряет — разработчиков создавать подклассы своих фреймворков для пользовательских элементов управления (виджетов) и имеет мощную библиотеку манипуляций с графикой, которую вы можете легко привязать к своим элементам управления. - person Austin Hyde; 10.07.2010
comment
Qt также использует преимущества платформы, такие как ящики, листы и связывание файла с окном в Mac OS X. - person Austin Hyde; 10.07.2010
comment
@Убить КРТ. Эти элементы управления выглядят довольно сложными, и разработать их в любом фреймворке будет непростой задачей. Но лучший способ сделать их мультиплатформенными — использовать Qt. - person Aleksandar Vucetic; 12.07.2010
comment
На самом деле такие элементы управления, как Kill KRT, довольно легко разрабатывать в WPF/Silverlight. Их сложно разрабатывать в Qt только потому, что сам Qt настолько примитивен (нет шаблонов данных, ограниченная модель рендеринга и т. д.). А Silverlight — отличный выбор для кроссплатформенной разработки графического пользовательского интерфейса рабочего стола. Так что для целей Kill KRT я думаю, что Silverlight явно лучше, чем Qt. - person Ray Burns; 13.07.2010

Я бы предложил Mono и GTK#. Разработка приложений с помощью .Net намного эффективнее, чем на C++ vanilla. Конечно, вы должны придерживаться C# 3.0 и .Net 2.0 (реализованы некоторые функции версии 3.5, например, LINQ). Но он по-прежнему дает вам гораздо больше, чем C++ с, например, QT.

person jgauffin    schedule 10.07.2010
comment
Я знаю... Я также нахожу C# значительно более продуктивным, чем C++, но когда я попытался создать экзотический пользовательский элемент управления (например, древовидное представление с анимированным значком), я обнаружил множество проблем с производительностью, GDI+ ограничены . Поэтому я ищу библиотеку/фреймворк, который сделает все проще и быстрее. GTK# это? Или, может быть, мне лучше выбрать C++ и QT? - person Kill KRT; 10.07.2010
comment
@Kill KRT: GTK обладает большой гибкостью, которую разделяет Qt, поскольку оба набора инструментов исходят из среды, в которой действительно нет собственной библиотеки виджетов. Однако во многих областях Qt гораздо проще расширять, чем GTK. - person greyfade; 10.07.2010
comment
У меня не было проблем с производительностью с GDI+. Двойная буферизация необходима, если вы собираетесь использовать анимированную иконку или что-то в этом роде. Тогда будет гладко, как у младенца ;) - person jgauffin; 10.07.2010

Переходите на C# для повышения производительности. Ничего против С++, но это немного многословно. Что касается библиотеки графического интерфейса, я думаю, что WinForms работал на Mono. Альтернативно, GTK#.

person Mau    schedule 10.07.2010

Я бы не советовал использовать wpf, потому что это платформа, зависящая от платформы. Silverlight может быть лучшим вариантом.

Но если вы разрабатываете веб-приложение, jquery будет хорошим вариантом, вы также можете рассмотреть adobe flex и adobe air; http://www.adobe.com/products/air/

person Kadir Sümerkent    schedule 10.07.2010
comment
Нет, я не разрабатываю веб-приложение, но спасибо за совет. Посмотрю на Air (хорошо звучит название ;-)) - person Kill KRT; 10.07.2010
comment
Adobe AIR прекратил поддержку Linux, Microsoft Silverlight практически мертв. Adobe Flex стал Apache Flex. - person Palec; 20.06.2016

Должны ли мультиплатформы включать iDevices? Может быть в сети? Это 2 вопроса, на которые вы должны ответить в первую очередь.

Если вы можете жить без поддержки iPad/iPhone, то Flex/Flash/Air — хороший вариант для графических вещей. Он наверняка мультиплатформенный и легко интегрируется в Интернет. Вероятно, ваш лучший вариант для этого случая с ограниченными данными.

Qt может работать и для вас, хотя я не могу точно сказать, упростит ли это графическая библиотека. Я лично никогда не работал с ним, поэтому другим придется ответить на этот вопрос. Но так как это на C++, вы можете использовать и другие библиотеки.

Java Swing кажется мне грубым для этого сложного графического интерфейса. Создание некоторых базовых вещей не так уж и плохо, но если вы ожидаете получить опыт работы с C#, я думаю, вы будете разочарованы. Только личное мнение конечно.

Наконец, если это может быть веб-приложение, почему бы не использовать C# и Silverlight? Решение .NET может подойти вам, поскольку вы уже изучаете его.

person Awaken    schedule 10.07.2010
comment
Это не веб-приложение, и я не думаю, что оно будет совместимо с какими-либо iDevices... Думаю, я собираюсь вернуться к своей книге Стивена Прата и попробовать Qt! ;-) - person Kill KRT; 10.07.2010
comment
Какая? Silverlight предназначен не только для веб-приложений. Silverlight также является отличной платформой для настольных приложений. Приложения Silverlight могут работать или вне браузера во всех основных операционных системах. Ваш ответ, кажется, подразумевает, что Silverlight ограничен веб-приложениями. Возможно, вам следует отредактировать его, чтобы было ясно, что Silverlight также является хорошим выбором для настольных приложений. - person Ray Burns; 13.07.2010
comment
Моя единственная проблема, даже в моей собственной рекомендации против Silverlight, — это проникновение. Если он действительно хочет кроссплатформенности, он многое упустит, если захочет обратиться к широкой аудитории. По данным riastats, только около половины пользователей OSX установили его. И вчера я спросил 5 друзей Mac, и ни один из них не установил его или даже не знал, что это такое. То же самое относится даже к Windows 7 или Windows XP. Думаю, это зависит и от целевой аудитории. Как всегда, нам, вероятно, нужно больше информации. И я не хотел подвергать сомнению возможности Silverlight. - person Awaken; 13.07.2010
comment
Может я ошибаюсь, но как я знаю Silverlight нативно доступен только на Windows и Mac, на Linux есть портирование (Moonlight). Могу ли я разработать приложение в Silverlight и легко перенести его в Moonlight? Я также знаю, что Moonlinght не полностью охватывает все возможности Silverlight. Было бы замечательно, если бы инфраструктура WPF была доступна на Mac и Linux! - person Kill KRT; 14.07.2010
comment
@Awaken: Да, проникновение Silverlight сегодня составляет всего 62%, но понимаете ли вы, что год назад он составлял около 30%? По темпам развития Silverlight к концу 2011 года он легко догонит Flash. Также обратите внимание, что установка Silverlight намного быстрее и чище, чем установка Flash (без раздражающих дополнительных действий), что вполне возможно, что некоторые из ваших друзей OSX установили и не замечаете. Но на самом деле все это не имеет значения, так как Kill KRT разрабатывает настольное приложение — он может просто включить Silverlight как часть установочного пакета и покончить с этим. - person Ray Burns; 16.07.2010
comment
@Ray Burns - Никаких аргументов от меня. - person Awaken; 16.07.2010

Silverlight работает на Windows/Mac/Linux и на некоторых портативных устройствах, и в настоящее время портируется на другие портативные устройства. Я считаю, что Silverlight в конечном итоге будет портирован на все популярные устройства.

Сильверлайт это:

  1. Гораздо мощнее, чем Flex/Flash/Air.
  2. Гораздо мощнее, чем Qt.
  3. Невероятно мощнее, чем GTK+ или GTK#.
  4. Невероятно мощнее, чем JOGL.

Silverlight обладает всеми запрошенными вами функциями.

Silverlight очень хорошо работает с C#, который является гораздо более продуктивным языком для работы, чем C++.

Silverlight — это, по сути, очень большое подмножество WPF, поэтому, если вы уже знакомы с WPF, вы уже знакомы с Silverlight.

Если вам абсолютно не нужна поддержка iPhone/iPad, я думаю, что решение совершенно очевидно.

См. это сравнение WPF и Cocoa, чтобы получить некоторые ощущение того, как WPF/Silverlight сравнивается с подобными Qt, Flash/Flex/Air и GTK#, все из которых используют примитивную объектную модель, подобную WinForms, подобную той, которая используется Cocoa.

person Ray Burns    schedule 13.07.2010
comment
Я не знал, что Silverlight можно использовать и для разработки настольных приложений. Мои сомнения: - Производительность (QT против Siverlight) - Портативность (Moonlight не полностью реализует все функции Siverlight) - Как Silverlight связан с WPF? Могу ли я изучить WPF, а затем легко перейти на Silverlight? - person Kill KRT; 14.07.2010
comment
Первоначально Silverlight назывался WPF/e для WPF Embedded и представлял собой упрощенную версию WPF. Первоначально он был намного проще, чем WPF, но теперь разрыв существенно сократился. Первые версии были доступны только для Интернета, но более поздние версии позволяли запускать Silverlight как настольное приложение. - person Ray Burns; 16.07.2010
comment
Moonlight фактически реализует 100% каждой версии Silverlight и проходит набор тестов Silverlight, предоставленный Microsoft. Moonlight отстает примерно на 1 год, поэтому для переносимости Linux, как правило, просто откладывайте одну версию назад. - person Ray Burns; 16.07.2010
comment
Изучение WPF, а затем переход на Silverlight — отличный подход: многие сделали это довольно успешно. Здесь и там вы обнаружите, что чего-то не хватает, но все основы одинаковы. На самом деле, если вы не используете какие-либо функции, предназначенные только для WPF, ваше приложение WPF фактически скомпилируется и запустится в Silverlight без каких-либо изменений. Не тратьте много времени на изучение FlowDocument или 3D, потому что они еще не включены в Silverlight, но почти все остальное включено. - person Ray Burns; 16.07.2010
comment
Производительность между Qt и Silverlight будет сопоставима в большинстве случаев. Для сложной графики и анимации отображение Silverlight будет заметно быстрее и плавнее. Для окон с десятью тысячами видимых одновременно виджетов Qt будет инициализироваться быстрее. В остальном вы не увидите большой разницы между ними. - person Ray Burns; 16.07.2010
comment
Я не знаю, является ли это моей проблемой из-за конфигурации моего программного/аппаратного обеспечения, но эта демонстрация Silverlight работает очень медленно, чтобы быть базовым механизмом частиц: - labs.nerdplusart.com/particles/fullscreen.php — я использую Ubuntu 10.04 64-бит с Core 2 Duo Q6600 (четырехъядерный @ 2,66 ГГц), 4 ГБ ОЗУ и GeForce 8800 GTS (с установленным последним официальным драйвером nVidia)! Не могли бы вы подтвердить, что это довольно медленно с Moonlight? - person Kill KRT; 12.08.2010
comment
Демо, на которое вы ссылаетесь, очень хорошо (и плавно) работает на Silverlight. Я не помню, чтобы Moonlight был заметно медленнее, чем Silverlight, но сейчас не могу проверить эту конкретную ссылку. (Мои установки Linux — это все виртуальные машины, поэтому для них использовался программный рендеринг.) - person Ray Burns; 13.08.2010
comment
Microsoft Silverlight практически мертв. Microsoft объявила об окончании срока службы Silverlight 5 в 2012 году. В 2013 году Microsoft объявила о прекращении разработки Silverlight, за исключением исправлений и исправлений. Microsoft установила дату окончания поддержки Silverlight 5 на октябрь 2021 года.[6] Silverlight больше не поддерживается в Google Chrome с сентября 2015 года.[7] Поскольку Microsoft Edge не поддерживает подключаемые модули, он также не поддерживает Silverlight.[8] - person Palec; 20.06.2016

На моей основной работе (известная компания по производству микропроцессоров) мы разрабатываем сложные инженерные приложения с помощью Java, Eclipse RCP и Java OpenGL. Производительность хорошая — мы можем легко получить много миллионов полигонов в секунду и до 100 кадров в секунду. Виджеты SWT в Eclipse работают достаточно быстро, и нам не нужно было рендерить какие-либо пользовательские элементы управления с помощью JOGL.

У меня есть набор руководств, в которых показано, как начать работу с такого рода программированием. Серия начинается с http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/.

person Wade Walker    schedule 25.10.2010

Во-первых, не используйте C# для всего, что должно быть переносимым. Моно — плохой вариант для графического интерфейса по двум причинам:

  1. Mono всегда идет на несколько шагов позади .NET.
  2. Mono не поддерживает WPF, поэтому единственный способ разработать графический интерфейс — использовать что-то вроде GTK#.

Мое личное мнение — используйте C++. Это дало бы вам очень хорошую мобильность и независимость.

У вас есть два варианта:

  • Qt4 — очень хороший инструментарий GUI, который делает разработку графического интерфейса очень простой и легко переносимой.
  • GTKmm — тоже очень хороший инструментарий, но в Windows он кажется менее естественным.

Кроме того, в Java есть инструментарий Swing, который поставляется с JDK и доступен на всех платформах Java, даже на очень странных, таких как OpenVMS.

person Artyom    schedule 10.07.2010
comment
Есть ли проблемы с производительностью Java Swing? Должен ли я использовать Java+OpenGL (JOGL) для более быстрого рендеринга сложных элементов управления? Интересно, как реализуются сложные графические интерфейсы (такие как Maya, Cubase, Adobe Premiere)! - person Kill KRT; 10.07.2010
comment
@Kill KRT - если для вас критична производительность, используйте C++ с Qt или GTK, не работайте с такими языками, как Java или C#, поскольку они имеют довольно низкую производительность. - person Artyom; 10.07.2010
comment
Проголосовал. Кажется, что многим поклонникам Java и C# не нравится слышать, что они не являются кросс-платформенными (Java нацелена только на платформу Java - даже с SWT) и Mono для графического интерфейса. Я согласен, что это шутка. Сам я иду трудным путем и кодирую все свои вещи в родном наборе инструментов платформы Cocoa/MFC/GTK с моим собственным уровнем абстракции. - person Lothar; 18.07.2010