Что выбрать для написания GUI в 2021.
Что лучше выбрать для написания десктопного GUI приложения в 2021 году.
Нужно написать кросплатфоменный интерфейс.
Там должны быть дерево, таблицы (большие, сортировки, группировки, …), формы. Хочется не писать их самостоятельно.
C# (WinForms или Avalonia, Gtk), поскольку на c# писал мало, и есть ощущения, что скорость разработки не очень высокая. Сходу полноценных таблиц и деревьев вообще не нашел.
Python (PySide6), посмотрел по gui на python. Варианты по сути:
- PyQt(PySide) 6 версия уже достаточно стабильна ? Документации навскидку не очень много нашел.
- wxWidgets есть ощущение, что менее мощный. (тут смущает, что будет медленнее C# и опять же GIL).
Web (web2ui) тут уже есть готовые хорошие таблицы. (но есть ощущение, что скорость работы будет проигрывать, плюс есть проблемы с работой с локальными ресурсами и многоконностью). По ощущению скорость разработки будет самая быстрая.
В C++ лезть не хочется, так как давно на нем не писал, и есть ощущение, что на нем разработка будет еще медленнее чем на C#.
Предварительно кажется, что python будет компромисным вариантом.
Разработчик пока всего один, и не хочется надолго увязать в написании GUI, так как есть и другие задачи.
На чем писать gui
Qt Creator предоставляет средства визуального программирования пользовательского интерефейса (чистый с++). Есть редактор формы, позволяющий располагать на форме элементы (кнопки, лейблы, текстбоксы) и программировать события связанные с ними. 
5 кроссплатформенных библиотек для разработки GUI на C++

C++, как и Python и многие другие языки программирования, поставляются без встроенных инструментов построения графического интерфейса пользователя. Так было и до середины 80-х, когда операционные системы для PC разрабатывались без этого типа интерфейсов, и даже после того, как Windows и различные операционные системы от Apple стали нормой, и событийно-ориентированному программированию потребовалось несколько дополнительных лет, чтобы наверстать упущенное.
Тридцать лет назад весь ввод/вывод был сделан на символьных дисплеях. Так было до начала 90-х, когда появились первые графические библиотеки. С тех пор Mac OS (и в меньшей степени Linux) выросла по важности по сравнению с Windows, что делает более привлекательными инвестиции в создание программного обеспечения, которое может работать на всех трех платформах без необходимости переписывать код
Без кроссплатформенных инструментов, вы должны были бы существенно переписать код для любой другой платформы только лишь для того, чтобы организовать обработку ввода/вывода и взаимодействие с пользователем. В то же время, графика на каждой операционной системе выполняется совершенно по-разному. Кроссплатформенные инструменты до некоторой степени защитят вас от этих различий и странностей.
Вам может никогда не понадобиться портировать ваше Windows приложение на Mac или Linux, но, по крайней мере, вы будете знать, что можете сделать это. В этом списке мы рассмотрим пять кроссплатформенных инструментов разработки GUI, которые написаны на C++ и все еще находятся в стадии активного развития. Пятерка, которую я выбрал, это Qt, wxWidgets, JUCE, CEGUI и CEF (некоторые другие, особенно GTK, MFC и Cocoa, не включены в список, так как они не полностью кроссплатформены).

Qt, один из старейших фреймворков, которому сейчас 21 год. Ранее принадлежал компании Nokia, текущий владелец – финская компания Qt Company. Платформа имеет лицензию, как свободное ПО с открытым исходным кодом, а также доступны версии Indie Mobile, Professional и Enterprise, начиная от $79 в месяц.
Этот старый фреймворк открыл себя заново со своей новой версией, Qt 5, которая используется везде, ото мобильных приложений до автомобилей и медицинского оборудования. Одним из его преимуществ является оконная системя, которая позволяет вам создавать пользовательские интерфейсы и включает в себя дополнительные функции, такие как отображение диаграмм, визуализация данных и карт от сторонних провайдеров. Qt версии 5 теперь обрабатывает прикосновения так же, как и взаимодействие с мышью и клавиатурой, и вы можете добавить виртуальные клавиатуры на X11 и Windows. На KDE Linux Qt является нативной библиотекой GUI, поэтому, если вы разрабатываете для KDE платформ, то вам следует рассмотреть Qt.
wxWidgets

Разработчик Джулиан Смарт создал wxWidgets 24 года назад (что делает его старше, даже чем Qt) и остается его главным разработчиком. Эта библиотека во многом похожа на Qt, хотя некоторые разработчики предпочитают ее, так как она использует родные графические элементы операционной системы, на которой запущена программа. Это заставляет приложения выглядеть более «родными»; например, на Windows, она будет использовать Windows графику.
(Для сравнения, Qt отрисовывает свои собственные виджеты на каждой платформе, хотя и старается выглядеть как можно ближе к платформе, используя некоторый низкоуровневый код для отрисовки полос прокрутки и кнопок.)

Данная кроссплатформенная библиотека с открытым исходным кодом использует аналогичную лицензию, что и Qt. Она фокусируется на кроссплатформенных аудио, интерактивных, встроенных и графических приложениях.
Первоначально разрабатываемая британским разработчиком Жюлем Сторером, была приобретена компанией Raw Material Software, которая разрабатывает аудиопродукцию. В результате, JUCE обладает большим количеством функциональных возможностей при работе с аудио, поскольку она изначально разрабатывалась для создания аудиоприложений.
Библиотека JUCE также включает в себя множество графических элементов пользовательского интерфейса, графику, аудио, парсинг XML и JSON, работу с сетью, криптографию, многопоточность и встроенный интерпретатор, который работает с синтаксисом, имитирующим ECMAScript. Это уменьшает или устраняет необходимость в сторонних библиотеках и проблемы с зависимостями, которые те могут вызвать. Нет ничего ужаснее, чем обновление сторонних инструментов, которое ломает сборку проекта.
JUCE также включает в себя “introjucer”, инструмент IDE, который может генерировать проекты Xcode, проекты Visual Studio, Linux Makefile, сборки Android Ant и проекты CodeBlocks.
CEGUI

Crazy Eddie GUI (GUI сумасшедшего Эдди) разрабатывается, начиная с 2003 года, и вполне возможно, версия 1.0 выйдет уже к 2020 году, поскольку текущая версия 0.87. Как и другие в этом списке, она работает на Windows, Linux и Mac и поддерживает и 64, и 32-битные системы. В отличие от остальных GUI библиотек в этом списке, она фокусируется на разработке игр, но, как говорилось, дает разработчику пакет виджетов (кнопки, выпадающие списки и т.д.), поэтому вы не ограничены только игровыми приложениями.
Большинство игр требуют графический интерфейс для всех меню и экранов настройки, которые рендерятся на таких платформах, как DirectX или OpenGL. Они поддерживают скины, позволяя выполнять настройку, чтобы соответствовать эстетике игры.
Конфигурация CEGUI также широко использует XML файлы. Они служат не только для настройки скинов (то есть, как выглядят элементы управления, общая цветовая схема и т.д.), для всего остального, такого как анимация, изображения, компоновка и схема управления файлами данных игры. Все они опираются на XML.

Chromium Embedded Framework – это простой фреймворк для встраивания браузеров на базе Chromium в другие приложения. Это отличает его от других библиотек C++ в списке, которые предназначены для создания автономных приложений. Вы могли не слышать об этом, но согласно документации, существует более 100 миллионов экземпляров CEF, встроенных во множество продуктов. CEF уже 8 лет, и он дорос уже до версии 3.
Интеграция в браузер Chrome позволяет получить доступ к JavaScript, ускорению GPU через WebGL, рендерингу в закадровую память и, в ближайшее время, к речевому вводу
Заключение
Хотя все эти библиотеки написаны на C++, доступно множество привязок языков, поэтому стоит проверить, какие языки программирования вы можете использовать с ними. wxWidgets особенно хорош в этом отношении, как и Qt, который используется в нескольких специализированных операционных системах и автомобильном ПО. Qt кажется более популярным на предприятиях, по-видимому, из-за платной поддержки, в то время как ученые и независимые разработчики предпочитают wxWidgets, поскольку он бесплатен и соответствует Qt.
И Qt, и wxWidgets охватывают много одинаковых областей, и это, возможно, случай для выбора в зависимости от личного предпочтения. Оба фреймворка имеют множество сторонних инструментов для упрощения разработки.
Я добавил сюда CEF, потому что включение браузера в десктопное приложение может пригодиться, возможно, для показа онлайн документации, отображения ссылок на новости или отображения загрузки обновления.
Обзор графических библиотек C++
Графические библиотеки для C++ позволяют сделать разработку UI приложений максимально быстрой и удобной. Рассказываем, на какие стоит обратить внимание.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

SFML (Simple and Fast Multimedia Library) — одна из самых удобных и быстрых графических библиотек для C++. Её неоспоримое преимущество — минимальные требования к уровню знаний языка и лёгкость освоения: всего за несколько дней можно написать вполне полноценную программу. К примеру, первое графическое приложение «SFML works!» можно написать всего за минуту. Ещё одно преимущество — кроссплатформенность: SFML работает под Windows, Linux (только X11, но не Wayland) и Mac OS, планируется выход под Android и iOS.
SFML библиотека используется по большей части небольшими стартапами и программистами, для которых создание игр — хобби. SFML популярен среди небольших команд благодаря тому, что разработка графической части программы не требует написания больших объёмов кода.
Qt представляет собой целый набор инструментов для быстрого и удобного проектирования GUI. Конечно же, здесь можно писать и игры — почему бы и нет? — но Qt привлекает программистов в основном тем, что она является быстрой, удобной, гибкой и кроссплатформенной. Во многом Qt обогнала даже SFML: библиотека доступна как на Windows, Linux и Mac OS, так и на мобильных платформах — Windows Mobile, Android и iOS.
Qt расширяет C++ с помощью МОК (Мета-объектного компилятора) и предоставляет дополнительные функции (например, сигналы и слоты). Также имеет платную службу поддержки (как и платную лицензию). Для Qt есть большой выбор IDE: QtDesigner, QtCreator, QDevelop, Edyuk, а также доступна интеграция с Visual Studio, Eclipse и XCode.
Qt является open source продуктом, в разработке которого можно принять участие. О других open source проектах для C++ читайте в нашей статье.
Вы можете пройти готовый курс по данной библиотеке.
Cairo

Cairo — библиотека для отрисовки векторных изображений под Linux, Windows и Mac OS. К примеру, такой крупный проект, как Mozilla, использует Cairo в браузерном движке Gecko. Также Cairo лежит в основе некоторых операционных систем (MorphOS, AmigaOS) и приложений (InkScape, Synfig, Graphite). При использовании библиотеки будьте готовы к отсутствию русскоязычных ресурсов.
Cairo может взаимодействовать с OpenGL бэкендом с поддержкой GPU, что, конечно, открывает целый список полезных функций.
Cocos2D-X

Кроссплатформенная библиотека Cocos2D-X призвана упростить разработку мобильных игр. Поддерживает все те же платформы, что и Qt. Из плюсов стоит отметить доступность, удобство эксплуатации и создание отдельного конструктора игр, основанного на библиотеке Cocos Creator. В списке игр, основанных на движке, есть всемирно известная BADLAND, работающая на всех доступных платформах.
Если при создании игры вам нужно работать с графикой и анимацией в больших объёмах, то лучше использовать Unity вместо Cocos2D-X. Unity имеет возможность плавной интеграции с такими инструментами, как Photoshop, Maya или Blender. В Cocos2D-X вся графика добавляется извне и на неё ссылаются из кода.
В Рунете нет уроков по этой библиотеке, но на английском языке есть отличный курс от разработчиков.

Juce — кроссплатформенный фреймворк, предназначенный для создания приложений и плагинов на языке C++.
Документации по Juce много, но не на русском языке. Поэтому можно скачать книгу «Программирование на C++ с JUCE 4.2.x: Создание кроссплатформенных мультимедийных приложений с использованием библиотеки JUCE на простых примерах».
Juce больше популярен среди разработчиков аудио — ПО благодаря набору интерфейсов-оболочек для построения аудио плагинов.
wxWidgets

wxWidgets — одна из старейших, но в то же время наиболее известных графических библиотек для отрисовки GUI. Её основной плюс — производительность. Если QT использует низкоуровневый код лишь для таких элементов, как кнопки и полосы прокрутки, то wxWidgets для каждой системы свой, и благодаря этому все элементы отображаются максимально похожими на системный стиль.
Важная особенность wxWidgets заключается в использовании «родных» графических элементов интерфейса операционной системы везде, где это возможно. Это существенное преимущество для многих пользователей, поскольку они привыкают работать в конкретной среде, а изменения интерфейса программ часто вызывают затруднения в их работе.
В Сети есть урок по работе с библиотекой от её разработчиков.
SDL 2.0

SDL — кроссплатформенная 2D-библиотека, предназначенная для написания приложений (в основном игр). Поддерживаются Windows, Linux, Mac OS, а также Android, Windows Mobile и iOS. Преимущества библиотеки — быстрота, надёжность и лёгкость в эксплуатации. Также в библиотеке реализованы профессиональные инструменты для работы со звуком — это большой плюс при разработке крупных проектов.
Комбинируется с wxWidgets и хорошо интегрируется с OpenGL.
Существует целый цикл уроков, размещённый на Habr.

Пожалуй, одна из самых известных графических библиотек. GTK+ — графический фреймворк, широко применяемый во многих системах. Изначально он задумывался как компонент GIMP, но за 20 лет после выпуска первой стабильной версии он нашёл применение в сотнях других приложений.
Сейчас GTK+ — это полноценный графический фреймворк, не уступающий тому же QT. Он поддерживает разные языки программирования и продолжает развиваться.
В своё время библиотека создавалась в качестве альтернативы Qt, которая была платной. GTK+ — один из немногих фреймворков, которые поддерживают язык C. Библиотека кроссплатформенная, но есть мнение, что программы на Linux выглядят более нативно, чем на Windows или Mac OS (GTK+ хорошо поддерживается даже на KDE). Интересно, что из-за некоторых проблем с кроссплатформенностью Wireshark перешла на Qt.
Пример первой программы можно посмотреть на Википедии.
Fast Light Toolkit

FLTK (произносится как «фуллтик») — графическая библиотека, которая работает на Windows, Linux (X11) и Mac OS. Поддерживает 3D графику с помощью OpenGL и имеет встроенный GLUT симулятор. Есть встроенный софт для создания интерфейсов — FLUID. Документация по библиотеке находится здесь.
![]()
Nana — это кроссплатформенная библиотека для программирования GUI в стиле современного C++. Поддерживаемые системы: Windows, Linux (X11) и Mac OS (экспериментально). Поддержка С++11\17 даёт возможность использовать современные фичи C++: лямбды, умные указатели и стандартную библиотеку. Так как это не фреймворк, использование Nana не будет оказывать влияния на архитектуру программы.
Здесь можно посмотреть документацию и примеры.
Заключение
Всегда следует учитывать особенности той или иной технологии. Выпишите список функций своего приложения, ещё раз прочитайте описания всех графических библиотек C++, и только после этого выбирайте то, что подойдёт вам больше всего.