технологии для создания кросспатформенного GUI

majesty_2

По своей научной работе мы с коллегами в лабе создаём вычислительный код с целью продавать модификации конечным пользователям. Для такого дела требуется создание графического интерфейса. Скорее всего, этим делом буду заниматься я, а потому сейчас выясняю, что нужно освоить, чтобы такую работу выполнить. Из обязательных требований к технологиям - наверное только переносимость, а точнее кроссплатформенность, чтобы win и lin пользователи могли с прогой работать. Из того, что уже влетало в мою голову, это слова навроде qt, java, но пока в голове каша. Очень хотелось бы узнать, какие технологии сейчас являются наиболее актуальными и удобными для создания кроссплатформенного gui?

agaaaa

Полагаю, суперкрасивый интерфейс вам не нужен.
Тогда конкретный фреймворк не важен. Можно хоть на C# и WinForms писать.
Или даже на Delphi!

YUAL

может для начала чтоит выяснить на чём они свой софт пишут?

majesty_2

Суперкрасивый не нужен. Возможностей C# и winforms, а сейчас уже всё же более актуален WPF, конечно достаточно, но разве они будут работать под linux?
Наш софт написан на C++, но прямой связи gui с ним нет никакой - программа запускается на многопроцессорном комплексе. Задача gui - создать конфигурационный файл для той программы и как максимум - подключиться к суперкомпьютеру по ssh и поставить там задачу в очередь.
Хочется именно узнать не на чём "всё ещё можно" реализовать, а так как учить всё равно с нуля почти, то какие технологии являются наиболее актуальными и перспективными.
Собственно, очень интересно было бы услышать мнение гуру по поводу qt и java. Чем отличаются технологии и их возможности, простота и удобство использования, какая технология наиболее перспективна, есть ли достойные альтернативы?

Dimon89

Писать надо на том языке, который лучше всего знаешь. Если это c++, то Qt - ваш выбор.

majesty_2

Серёжа, а на остальные вопросы можешь ответить? Про перспективность, простоту, эффективность? Хочется скорее изучить что-то, что будет перспективнее вдальнейшем, а не быстрее, чтобы сделать.

kokoc88

Собственно, очень интересно было бы услышать мнение гуру по поводу qt и java.
1. Основное отличие в том, что это Java и С++ ; если требуется что-то сначала изучить, то на Java писать будет проще. У неопытных программистов на C++ могут быть утечки памяти и более частые падения программы, чем на Java. У опытных эти параметры будут одинаковые.
2. При использовании Qt часто возникает такая ситуация, что нужно тянуть всё оттуда: строки, сокеты, потоки, и так далее. Использовать что-то своё будет проблематично.
3. На Java десктопный интерфейс можно разрабатывать на swing. Многие ошибочно считают, что он тормозит, но это не так.
4. Обе технологии имеют дизайнер для помощи в расположении элементов интерфейса. Для Qt можно использовать Eclipse CDT (здесь у меня могут быть устаревшие данные для Java лучшей средой будет IntelliJ Idea.
5. Не думаю, что тебе не хватит стандартных контролов, но сложность создания своих примерно одинаковая. Зато на Qt намного больше boilerplate.
6. Для Java придётся ставить JRE, в то время как программа на C++ может работать без установки runtime environment. Программа на Java будет потреблять больше памяти.
7. Если у вас будут сложные математические вычисления, то они будут в 1.5 - 2 раза медленнее на Java.

Dimon89

Серёжа, а на остальные вопросы можешь ответить? Про перспективность, простоту, эффективность? Хочется скорее изучить что-то, что будет перспективнее вдальнейшем, а не быстрее, чтобы сделать.
Если бы я сравнивал c++/Qt vs Java/swing, то я бы сказал так:
1) Перспективность. Ни один из упомянутых языков в ближайшем будущем не устареет, соответственно и Qt, и swing будут развиваться и процветать. Qt сейчас достаточно динамично развивается, мы им активно пользуемся. Со swing-ом чуть похуже, но не сильно.
2) Простота. Если вам нужен стандартный гуй из формочек и кнопочек, то в Qt Creator (дефолтный IDE для Qt) это делается из коробки на ура. Стандартные компоненты на все случаи жизни, удобный дизайнер, поддержка стилей и скинов - всё быстро и просто. Если нужно что-то более сложное типа красивой визуализации, то вся мощь OpenGL к вашим услугам (причём есть куча вспомогательных классов, снимающих массу проблем и тонкостей). Swing здесь проигрывает по всем параметрам.
3) Эффективность. Тут тоже выигрывает с++. Конечно, он даёт массу возможностей выстрелить себе в ногу, но Qt позволяет скрыть множество вещей типа динамического выделения/освобождения памяти, так что можно писать код в стиле java и не париться. Впрочем, вам и эффективности java должно хватить за глаза, так что этот критерий я бы не стал принимать во внимание.

Dasar

С точки разработки, мне понравился вариант html-ajax-интерфейса. Всё приложение представляет собой пустую форму в которую вставлен web-browser, и весь вывод делается в веб-браузер.
Генерить всякие таблицы вперемешку с rich-текстом на html-е одно удовольствие, в отличии от нативных контролов.
Интерактив (включая всякие динамические графики) делаются через ajax, который посылает запросы основному приложению.
Переносимость сейчас хорошая, последние IE и Mozilla с хромом совместимы, если не лезть в какие-нибудь дебри.
Под html легко и дешево найти дизайнера и верстальщика, которые сделают интерфейс красивым.
Еще один плюс, что за одно получается сразу и веб-интерфейс.

kill-still

Генерить всякие таблицы вперемешку с rich-текстом на html-е одно удовольствие, в отличии от нативных контролов.
О_о

SergeRRRRRR

3. На Java десктопный интерфейс можно разрабатывать на swing. Многие ошибочно считают, что он тормозит, но это не так.
Можно посмотреть тогда уж в сторону такой забытой технологии как Netbeans Platform.

luna89

А вам точно нужен GUI? Я сразу бы делал веб-интерфейс. Если надо работать с локальными данными на диске, то просто возьмите веб-сервер, который позволяет читать и писать данные на диск через HTTP GET и PUT.
Я работал со swing (это стандартная GUI библиотека на java на мой взгляд он не выдерживает сравнения с вебом.

kiracher

Наш софт написан на C++, но прямой связи gui с ним нет никакой - программа запускается на многопроцессорном комплексе. Задача gui - создать конфигурационный файл для той программы и как максимум - подключиться к суперкомпьютеру по ssh и поставить там задачу в очередь.
С риском набрать минусов скромно замечу что освоить python + pyqt + paramiko может быть гораздо проще чем кажется. Особенно если подходить со стороны с++ / qt.

agaaaa

но разве они будут работать под linux?
WinForms будет
http://www.mono-project.com/docs/faq/winforms/
И, в отличие от Qt, не придётся заниматься перекомпиляцией под каждую платформу.
То же с Явой.

marat7256

Задача gui - создать конфигурационный файл для той программы и как максимум - подключиться к суперкомпьютеру по ssh и поставить там задачу в очередь.

Задача для веб интерфейса.
Ну, или qt.

agaaaa

Задача для веб интерфейса.
Для вёб интерфейса придётся ботать server- и client-side стек + ещё, возможно, CSS.
Думаю, это оверкилл для редактирования файла конфигурации. Тем более, если на кластере/суперкомпьютере апач не стоит.

luna89

Для вёб интерфейса придётся ботать server- и client-side стек + ещё, возможно, CSS.
Думаю, это оверкилл для редактирования файла конфигурации. Тем более, если на кластере/суперкомпьютере апач не стоит.
Там похоже надо веб-формочку сделать типа <input type='text' name=someParam>
Мне тут оверкиллом кажется установка jre или qt приложения на разные платформы.

agaaaa

Там похоже надо веб-формочку сделать типа <input type='text' name=someParam>
Мне тут оверкиллом кажется установка jre или qt приложения на разные платформы.
И вместо них ты предлагаешь HTML и JavaScript?
I rest my case.

PooH

Да реально проще всего в качестве гуя зафигачить HTML+CSS+JS
Можно обернуть это все в qt-шый QWebView и не париться.
HTML+CSS+JS суперпопулярен, куча документации и достаточно прост, если не углубляться
переносимость - будет работать везде, и даже почти одинаково
огромное кол-во готовых библиотек и прочего
самое сложное, ИМХО, транспорт между "сервером" и "браузером" - но это скорее муторно, чем сложно
тем более в том же qt есть проброс QObject в контекст браузера: http://qt-project.org/doc/qt-4.8/qwebframe.html#addToJavaSc...

PooH

ботать server- и client-side
клиентсайд - да, сервер-сайд - нахуя?
как я уже говорил, в Qt можно объект пропихнуть в JS, и через общаться

yroslavasako

Вроде теперь дефолтное гуи под яву - это жавафх, а не свинг

agaaaa

клиентсайд - да, сервер-сайд - нахуя?
как я уже говорил, в Qt можно объект пропихнуть в JS, и через общаться
Ок, убери сервер-сайд, подставь на его место Qt

istran

Задача gui - создать конфигурационный файл для той программы и как максимум - подключиться к суперкомпьютеру по ssh и поставить там задачу в очередь.
Хочется именно узнать не на чём "всё ещё можно" реализовать, а так как учить всё равно с нуля почти, то какие технологии являются наиболее актуальными и перспективными.
Раз уж вычисления идут на сервере, что мешает там же поднять web-интерфейс? По-моему самый очевидный, простой в реализации и дешевый вариант.

PooH

Ок, убери сервер-сайд, подставь на его место Qt
я не знаю, на чем пишет ТС, если весь гуй будет навешен сбоку, то не виду проблем использовать Qt - в нем столько сахара, что базовых знаний с++ хватит с головой.
да и под большинство языков в GUI-фреймворках найдется что-то схожее с QWebView

majesty_2

Большое спасибо всем, кто высказал свое мнение.

Ushkvarok

а выбрали что-нибудь в итоге?

majesty_2

Решила, что все надо как-то хотя бы в виде hello wold попробовать. Веб-не вариант. Более робастным выглядит qt. Хотя за явой oracle и это тоже внушает. + все клиент банки нормальные на яве написаны. Я знаю пару постпроцессоров (визуализаторы и обработчики мат расчетов написанных на qt, так что скорее склоняюсь к нему. Ну и кресты ближе, чем ява. Так что я выбрала qt.
Оставить комментарий
Имя или ник:
Комментарий: