LINUX.ORG.RU

На чем сейчас можно писать современный кроссплатформенный GUI?

 ,


0

3

Дано:

  • программер 1шт, хорошо знаю Java, неплохо JS, совсем немного Python;
  • десктопный проект, планируется длительная поддержка;
  • кроссплатформенность обязательна;
  • наличие современного LaF обязательно;
  • наличие готовой RCP приветствуется;


Варианты:

QT/C++ - точно нет. Я не планирую учить C++, писать кучу велосипедов, и компилировать отдельно под каждую target платформу;

PyQT/Python и wxPython/Python - не нравится. Python не нравится тем, что у него часть библиотек до сих пор только под 2.x и что-то может всплыть когда я уже начну проект. Не нравится тем, что когда я последний пробовал его под десктоп, были проблемы с созданием бандла под pyinstaller. wxPython не устраивает убогим LaF, PyQT - лицензией. Хотя проект Open Source я не хочу брать в него библиотеку с двойным лицензированием.

Swing/Java - Отсутствие достойных LaF (JetBrains не делятся). В GTK+ LaF куча артефактов под Linux. Желающие проверить могут запустить NetBeans.

JavaFX/Java - крайне сомнительное будущее технологии, учитывая что Oracle от нее в общем отказался. Жрет память как не в себя.

Все MS технологии - нет. Потому что MS;


Финалисты:

  • Eclipse RCP;
  • Electron;

В Eclipse RCP по причине OSGI сломали модель подключения зависимостей Java, и этот компонент там делается через ж, но зато из коробки идет интерфейс и поддержка плагинов. Electron требователен к ресурсам, но судя по всему это тренд ближайшего времени.

Оказывается, что десктоп сейчас мало кому нужен и кроссплатформенных вариантов не так много. Кто что думает?


Qt Quick/JS — учить плюсы не обязательно, но под все платформы придется собирать все равно.

LaF

Что это?

RCP

А это?

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Суть Qt Quick - создать крестовую прослойку между кодом на qml и ядром приложения на крестах, верно? И предоставляет кучу классов от QQuickImageProvider до всяких QQuickTextureFactory и QQuickWindow и прочей дребедени, вот список http://doc.qt.io/qt-5/qtquick-module.html.

anonymous
()
Ответ на: комментарий от anonymous

Не верно. Всю логику при желании можно писать на JS, впрочем я уже говорил об этом. Вам следовало бы учить матчасть, прежде чем обвинять людей во лжи.

The Qt Quick module is the standard library for writing QML applications. While the Qt QML module provides the QML engine and language infrastructure, the Qt Quick module provides all the basic types necessary for creating user interfaces with QML. It provides a visual canvas and includes types for creating and animating visual components, receiving user input, creating data models and views and delayed object instantiation.

The Qt Quick module provides both a QML API which supplies QML types for creating user interfaces with the QML language, and a C++ API for extending QML applications with C++ code.

Note: A set of Qt Quick-based UI controls is also available to create user interfaces. See Qt Quick Controls for more information.

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Что это? А это?

Забей. Это явист. Они обожают аббревиатуры и несовместимые между собой фреймворки. Ты ему напиши RPT или JFE и бедняга побежит разбираться, искренне считая, что это не случайный набор символов, а дельный совет.

Stahl ★★☆
()

JavaFX/Qt/GTK/Wx

Electron, nwjs

если любишь секас с JavaScript, то да

если софт не игра, не аудиоредактор или что то связанное с производительностью, то я бы выбрал JavaFX

umren ★★★★★
()
Последнее исправление: umren (всего исправлений: 1)

учитывая что Oracle от нее в общем отказался

Это ты откуда взял? Оракул наоборот ее в нормальный вид привел и в SE запихнул, так что у тебя какие то неправильные данные.

umren ★★★★★
()
Ответ на: комментарий от CrossFire

LaF - видимо, Look and feel. Чтобы смотрелось нативно и красиво, а не как Motif.

RCP - видимо, Rich Client Platform. Чтобы была куча готовых модулей, и не пришлось велосипедить на любое требование.

anonymous
()

Electron требователен к ресурсам, но судя по всему это тренд ближайшего времени.

Только вот не ясно, откуда ты возьмешь LaF в веб интерфейсе. Сколько не пердолься оно будет либо выглядеть колхозно на всех платформах или везде одинакого плохо.

Ближе Qt к решению этой проблемы никто не подошел.

o-
()

На Adobe AIR круто получается под три платформы. На GTK и Qt (при условии, что ты положишь DLL в архив с виндовой версией). А вообще, вся надежда на Майкрософт с их .NET Core.

ZenitharChampion ★★★★★
()

Chrome Apps с включенными флагами experimental features. На Java поднимаешь WebSocket на Undertow. На UI юзаешь display:grid https://css-tricks.com/snippets/css/complete-guide-grid/ display:flex https://css-tricks.com/snippets/css/a-guide-to-flexbox/ и ES6 синтаксис (в Eclipse хреновая поддержка, в Netbeans nightly builds - более менее).

Дальше останется лишь написать под это дело фреймворк ) Я сейчас как раз этим и занимаюсь, вот уже как месяц. В итоге все будет работать, как в браузере, так и на любой платформе вплоть до Android как Chrome Apps. C джавой как на удаленном сервере, так и на той же машине (единственно на Android пока не в курсе как портировать WebSocket сервер).

Если фреймворк нет желания писать можешь попробовать Angular2+Java https://github.com/tchoulihan/flowchat

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)

JetBrains не делятся

Как будто из коммьюнити-версии выдрать нельзя. Но в любом случае, GUI в поделках от JetBrains — лютое говно. Как, впрочем, и сами поделки.

EXL ★★★★★
()
Ответ на: комментарий от foror

Но Angular2 и все эти остальные веб-фреймворки слабо заточены под разработку десктопного софта. Так что так или иначе придется дописывать кучу функциональности.

А в Electron дистрибутив под 150 мегабайтов для Hello World. К тому же стартует долго на не SSD.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)

Хотел написать гуй, выдвинул кучу требований про которые даже гул не знает в итоге победил эклипс, походу единственное чем ты владеешь .

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

Если ты еще раз прочтешь вопрос, то единственное мое по сути требование, это кроссплатформенный GUI тулкит, который не выглядит как говно, и который не похерили его создатели.

Просто получается, что единственная стабильная и развивающаяся технология для десктопа - это QT-based что-то. Но под которую нужен C++. И альтернатив того же уровня не просматривается, поэтому и приходится искать компромиссы.

emcode
() автор топика
Ответ на: комментарий от CrossFire

Qt Quick/JS — учить плюсы не обязательно

А если потребуется драйвер БД, HTTP клиент, JSON-парсер или вариант посложнее markdown парсер - тоже необязательно?

emcode
() автор топика
Ответ на: комментарий от emcode

Но под которую нужен C++

Ну так и овладей им. Hint: подмножество C++, которое используется в Qt, практически ничем не отличается от тех же C#/Java, а работает в десятки раз быстрее. В Qt для плюсцов совсем не нужно использовать шаблоны и исключения.

EXL ★★★★★
()
Ответ на: комментарий от umren

А что именно Oracle привел в нормальный вид? У JavaFX остались большие проблемы с производительностью. Я пока не видел ни одной success story, или приличной софтины под JavaFX. Все что мне попадалось, это вот - http://asciidocfx.com/, и оно жрет не меньше Electron. SceneBuilder теперь у Gluon. Ни один компонент JDK не использует JavaFX, NetBeans - тоже не планирует переходить на JavaFX. Вменяемых заявлений Oracle по этому поводу не было. На мой взгляд более чем мутное будущее. Хотя API, да, удобный.

emcode
() автор топика
Ответ на: комментарий от emcode

https://jaxenter.com/20-javafx-real-world-applications-123653.html

А что именно Oracle привел в нормальный вид?

JavaFX была не в SE, JavaFX «скриптовалась» левыми методиками, они выкинули и сделали просто джаву. До оракла JavaFX была мертва, сейчас - пациент стабилен.

Ни один компонент JDK не использует JavaFX, NetBeans - тоже не планирует переходить на JavaFX.

а меня это волнует вообще? в энтерпрайзах JavaFX используется очень активно

umren ★★★★★
()
Последнее исправление: umren (всего исправлений: 1)
Ответ на: комментарий от EXL

Ну так и овладей им. Hint: подмножество C++, которое используется в Qt, практически ничем не отличается от тех же C#/Java,

Тоже думаю, что на базовом уровне и работе с готовыми библиотеками, это не должно быть сложно. Но для одного проекта это слишком большая инвестиция времени, которая в будущем себя не окупит.

emcode
() автор топика

Рекомендую нанять программиста на qt. Учитывая, что тебе нравится лаф мозгоструйных - еще и дизайнера.

ya-betmen ★★★★★
()
Ответ на: комментарий от EXL

Пока не приходится решать откуда лезут странные глюки и тормоза. А еще проганье на qml достаточно сильно отличается от того же свинга, так что наскоком пересесть не выйдет.

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

ya-betmen ★★★★★
()

Python не нравится тем, что у него часть библиотек до сих пор только под 2.x и что-то может всплыть когда я уже начну проект

Ты серьезно??? Это причина? Ты как «принцесса на горошине», всё тебе не мягко не сладко :) С такими жесткими критериями тебе не подойдет ровным счетом ничего. А PyQt как раз хороший вариант, который ты напрасно отметаешь.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от EXL

Ну так и овладей им. Hint: подмножество C++, которое используется в Qt, практически ничем не отличается от тех же C#/Java, а работает в десятки раз быстрее. В Qt для плюсцов совсем не нужно использовать шаблоны и исключения.

+1, мне приходилось писать на C# некоторое время, так вот Qt/C++ не уступает по удобству и надежности (работая с классами-контейнерами Qt уходят многие опасности C++).

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от emcode

А если потребуется драйвер БД, HTTP клиент, JSON-парсер или вариант посложнее markdown парсер - тоже необязательно?

XMLHttpRequest есть для запросов, JSON парсер из коробки, написать сферический markdown парсер на JS тоже можно, с SQLite можно работать без С++.

CrossFire ★★★★★
()

Лучше qt и wx ничего нету. Жаба всегда доставляет пользователю геморрой, который должен брать на себя прогер. GUI на основе браузера - не пиши «гуй» тогда, сделай веб страничку лучше или найми программиста.

anonymous
()

JavaFX, я серьёзно. Там есть встроенная работа с аудио-видео и даже обёртка для вебкита. Разрабатывается он довольно активно, достаточно посмотреть багтрекер OpenJDK и открытые/исправленные баги. Ну а насчёт тормозов - если не говнокодить, то тормозит не больше, чем любой, более-менее продвинутый гуй, так как поддерживает отрисовку в opengl. Потом - QT, включая PyQT, а в самом конце - gtk и c#.

GblGbl ★★★★★
()
Последнее исправление: GblGbl (всего исправлений: 1)
Ответ на: комментарий от Deathstalker

А вот нифига, там они веберы в тусовке, полноценный гуй без браузера прогерам на этом не интересен.

anonymous
()
Ответ на: комментарий от EXL

PDFsam Basic 3.1.0

~ » top -bc | grep java            
10149 emcode      20   0 5581368 352336  46100 S   6.2  4.4   0:27.80 /usr/bin/java -jar

~ » top -bc | grep atom
10384 enzo      20   0 1438572 133580  77200 S   0.0  1.7   0:01.94 /opt/atom/atom
10387 enzo      20   0  299876  28832  25760 S   0.0  0.4   0:00.03 /opt/atom/atom --type=zygote --no-sandbox
10415 enzo      20   0 1322168 240220  86908 S   0.0  3.0   0:07.56 /opt/atom/atom --type=renderer --js-flags=--harmon+
10480 enzo      20   0  877068  49768  30612 S   0.0  0.6   0:00.36 /opt/atom/atom 

Да что ж оно все такое жирное то :(

emcode
() автор топика
Ответ на: комментарий от Deathstalker

Пиццерия-хипстерия.

Го хорош тем, что быстро компилируется, так что разработка не сильно медленнее питона/пхп. А нативные библиотеки добавляют +100500 времени на компиляцию, так что нужно тебе что-то поменять - жди пару минут, пока оно соберется. И Го линкуется статически, так что от этого времени никуда не денешься, придется реально ждать каждый раз.

Прибавь какую-то фигню с дебагером, и получишь, что ГУИ на Го нет.

anonymous
()
Ответ на: комментарий от Deathstalker

Попробовал (год назад). Ощущения и описаны.

anonymous
()

pygi/pygobject. На трешку переписали уже все что можно.

gregz
()
Ответ на: комментарий от ism

Зачем pyqt если есть qt designer ?

Зачем Linux, если есть GNU?

CrossFire ★★★★★
()
Ответ на: комментарий от arturpub

Пруфца бы. Понятие «эталонный GUI» подходит разве что к MacOS. На винде каждый клепает как хочет. Ну а на лине нет, и не может быть, единого GUI.

Но если нужно, что бы прога везде выглядела более-менее как родная - Qt. Альтернатив нет.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

что бы прога везде выглядела более-менее как родная - Qt

Там имеются специфичные контролы, которые совсем не выглядят нативно.

Альтернатив нет.

wxWidgets использует:

GTK+ в GNU/Linux
WinAPI в MS Windows
CocoaAPI в macOS.

И выглядит более «нативнее». Но библиотека виджетов скудная, конечно.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Хз. Меня сорцы wxW, после Qt, пугают. Да и не совсем понятно как модифицировать виджеты. Шаг в строну - всё нужно самому писать.

Ну и если баг в Qt, то он будет на всех ОС, а у wxW поведение может немного отличатся.

В целом альтернатива хорошая, но ее почти никто не использует. Хз почему. Но это первый звоночек.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

В целом альтернатива хорошая, но ее почти никто не использует. Хз почему. Но это первый звоночек.

На самом деле альтернатива плохая, именно потому что

Шаг в строну - всё нужно самому писать.

CrossFire ★★★★★
()
Ответ на: комментарий от EXL

Там имеются специфичные контролы, которые совсем не выглядят нативно...И выглядит более «нативнее». Но библиотека виджетов скудная, конечно.

Не факт, что те виджеты, которые в Qt из коробки плохо выглядят на macOS (например календарь), в wxWidgets вообще есть.

CrossFire ★★★★★
()
Ответ на: комментарий от RazrFalcon

Это скорее qt более-менее родная для винды и кде-линуксов, а не наоборот. Потому что под винду вообще нативки нет, кроме обросшего костылями mfc и производной кустарщины. Тот же офис построен на закрытом нонейме, например. А в целом кресты и болтварь в виндах это норма, так что не стоппер.

Реальная альтернатива — mvc вместо лапши и родные контролы/формы/поведения/принципы под каждую платформу. Одним лукофилом дело не ограничивается (хотя мало кто и его осиливает), т.к. разные именно подходы, а не стили, хотя в последнее время веб своей топорностью вроде как всех приучил к layout sdi (aka spa). С появлением вменяемого мобайла так и вообще форм-факторы разные, уже не поунифицируешь, даже при желании.

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.