Как написать кроссплатформенную программу? - PullRequest
13 голосов
/ 26 сентября 2008

Привет,

Я хочу написать небольшую кроссплатформенную утилиту с графическим интерфейсом. На каком языке / GUI-библиотеке мне следует придерживаться? Возможно ли это вообще?

Это будет небольшая программа, поэтому я не хочу заставлять людей загружать JVM или .NET Framework. Можно ли развивать его изначально?

Обновление 1.

Под «изначально» я подразумеваю, что конечным результатом будет собственный код без промежуточных слоев, таких как виртуальная машина Java или среда выполнения .NET Common Language Runtime

Обновление 2.

БЕСПЛАТНОЕ решение предпочтительнее;)

Ответы [ 15 ]

15 голосов
/ 26 сентября 2008

Если вы знаете C или C ++, я могу подумать о первой кроссплатформенной структуре GUI:

  • QT (C ++, проприетарный, но бесплатный с лицензией LGPL)
  • wxWidgets (C ++, наиболее полный и стабильный, но в то же время огромный)
  • FLTK (C ++)
  • FOX (C ++)
  • IUP (C, проще и чище, чем приведенные выше)

Если вы знаете Паскаль, вы можете попробовать freepascal + Lazarus . Я никогда этим не пользовался.

6 голосов
/ 26 сентября 2008

Проблема: если вы не хотите иметь графический интерфейс, но не хотите, чтобы пользователь загружал вечный API, Framework или виртуальную машину для его запуска, будь то TCL / TK, Java или QT и т. Д. тогда ты довольно быстро теряешься.

Причина в том, что вам придется перестраивать все функциональные возможности (GUI), которые предоставляют эти API, платформы и виртуальные машины, чтобы быть независимыми от платформы. И это много работы ...

С другой стороны: виртуальная машина Java установлена ​​практически на любую операционную систему с нуля, почему бы не попробовать ее?

5 голосов
/ 26 сентября 2008

Вы хотите разработать кроссплатформенную программу изначально? Э-э ... Я не думаю, что это сработает, главным образом потому, что эта фраза - парадокс. Если вы пишете собственный код, он по своей природе будет работать только на той платформе, для которой вы его запрограммировали. ;-) В этом вся суть фреймворка.

Так что вместо этого вы должны использовать очень тонкий фреймворк, если ваша программа будет настолько маленькой. Идея itmatt о Qt возможна.

4 голосов
/ 02 мая 2009

Лазарь великолепен. GTK2 на Linux, win32 / 64 на Windows, WINCE на euh, Винс. Он даже использует Carbon на Mac (работает на COCOA). Также легко продать вашему боссу (код совместим с Delphi)

4 голосов
/ 26 сентября 2008

wxWidgets имеет привязки ко всем видам языков - например, к Python, если ваше приложение достаточно маленькое.

4 голосов
/ 26 сентября 2008

WxWindows? О, теперь он называется WxWidgets: http://www.wxwidgets.org/

3 голосов
/ 26 сентября 2008

Попробуйте RealBasic. Visual Basic-подобный синтаксис, предназначается для Win32, OS X и Linux. Я не знаю подробностей о нацеливании на Linux, но для любой кроссплатформенной разработки, которую я сделал между Win32 и OS X, это была мечта.

http://www.realbasic.com

Редактировать: генерирует собственные исполняемые файлы. Есть небольшая стоимость - 100 долларов.

3 голосов
/ 26 сентября 2008

Я согласен с Георгием, Java - это путь. Немного поработав, вы можете заставить ваше настольное приложение работать как Java-апплет (так что пользователям вообще не нужно ничего активно скачивать). См. http://www.geogebra.org как пример приложения, которое работает гладко как кроссплатформенное Java-приложение И имеет простой порт для веб-апплета.

Два других преимущества использования Java:

  1. У них есть обширные библиотеки для создания пользовательского интерфейса, включая сборщики компонентов пользовательского интерфейса.
  2. Среда выполнения Java обычно обновляется автоматически для пользователя.

Один недостаток:

  1. Версия Java, установленная на вашем компьютере конечного пользователя, может быть не полностью совместима с вашим приложением, что требует от вас кодирования с наименьшим вероятным знаменателем.
3 голосов
/ 26 сентября 2008

Какие ОС вы имеете в виду, когда говорите о кроссплатформенности?

Как правильно указывает Epaga, нативные и кроссплатформенные являются взаимоисключающими. Вы можете написать несколько версий, которые изначально работают на нескольких платформах, или вам нужно использовать кроссплатформенную инфраструктуру.

В случае кроссплатформенного подхода всегда требуются дополнительные установки. Например, многие здесь предлагают использовать Python и один из его фреймворков. Это потребует инструктирования людей для установки Python - и, возможно, фреймворка - в первую очередь.

Если вы нацелены на Windows и OS X (и готовы экспериментировать с альфа-релиз-кодом для Linux, если требуется поддержка этой ОС), я настоятельно рекомендую вам взглянуть на использование Adobe AIR для графические приложения платформы.

3 голосов
/ 26 сентября 2008

Как насчет Python, использующего Qt или Wx, а затем использующего PythonToExe для создания «распространяемого» * ​​1001 *

Следует подумать о том, чтобы разработка не использовала нативную функциональность (т. Е. Реестр и т. Д.). Кроме того, такие вещи, как разрывы строк в текстовых файлах, будут иметь различные escape-символы, поэтому их необходимо обрабатывать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...