Реклама
Меморина
Меморина
Меморина

Обзор графических библиотек C++

Обложка: Обзор графических библиотек C++

Графические библиотеки для C++ позволяют сделать разработку UI приложений максимально быстрой и удобной. Рассказываем, на какие стоит обратить внимание.

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Кратко о главном: в обзоре рассмотрены 10 графических библиотек и фреймворков для C++ — от универсального Qt и минималистичного SFML до специализированных решений вроде Juce для аудио и Cairo для векторной графики. Выбор зависит от задачи: для игр подойдут SFML, SDL и Cocos2D-X, для десктопных приложений — Qt, GTK+ и wxWidgets, а для нативного внешнего вида — wxWidgets и Nana.
  1. SFMLQtCairoCocos2D-XJucewxWidgetsSDL 2.0GTK+Заключение

SFML

Логотип SFML — графической библиотеки C++

SFML (Simple and Fast Multimedia Library) — одна из самых удобных и быстрых графических библиотек для C++. Её неоспоримое преимущество — минимальные требования к уровню знаний языка и лёгкость освоения: всего за несколько дней можно написать вполне полноценную программу. К примеру, первое графическое приложение «SFML works!» можно написать всего за минуту. Ещё одно преимущество — кроссплатформенность: SFML работает под Windows, Linux (только X11, но не Wayland) и Mac OS, планируется выход под Android и iOS.

SFML библиотека используется по большей части небольшими стартапами и программистами, для которых создание игр — хобби. SFML популярен среди небольших команд благодаря тому, что разработка графической части программы не требует написания больших объёмов кода.

Попробуйте пройти начальный курс.

Qt

Логотип Qt — кроссплатформенного фреймворка для C++

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 — библиотеки для векторной графики

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

Cairo может взаимодействовать с OpenGL бэкендом с поддержкой GPU, что, конечно, открывает целый список полезных функций.

Cocos2D-X

Логотип Cocos2D-X — кроссплатформенного движка для мобильных игр

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

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

В Рунете нет уроков по этой библиотеке, но на английском языке есть отличный курс от разработчиков.

Juce

Логотип Juce — фреймворка для аудиоприложений на C++

Juce — кроссплатформенный фреймворк, предназначенный для создания приложений и плагинов на языке C++.

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

Juce больше популярен среди разработчиков аудио — ПО благодаря набору интерфейсов-оболочек для построения аудио плагинов.

wxWidgets

Пример интерфейса wxWidgets — нативный вид на каждой ОС

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

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

В Сети есть урок по работе с библиотекой от её разработчиков.

SDL 2.0

Логотип SDL — кроссплатформенной библиотеки для игр

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

Комбинируется с wxWidgets и хорошо интегрируется с OpenGL.

Существует целый цикл уроков, размещённый на Habr.

GTK+

Логотип GTK+ — графического фреймворка для Linux

Пожалуй, одна из самых известных графических библиотек. GTK+ — графический фреймворк, широко применяемый во многих системах. Изначально он задумывался как компонент GIMP, но за 20 лет после выпуска первой стабильной версии он нашёл применение в сотнях других приложений.

Сейчас GTK+ — это полноценный графический фреймворк, не уступающий тому же QT. Он поддерживает разные языки программирования и продолжает развиваться.

В своё время библиотека создавалась в качестве альтернативы Qt, которая была платной. GTK+ — один из немногих фреймворков, которые поддерживают язык C. Библиотека кроссплатформенная, но есть мнение, что программы на Linux выглядят более нативно, чем на Windows или Mac OS (GTK+ хорошо поддерживается даже на KDE). Интересно, что из-за некоторых проблем с кроссплатформенностью Wireshark перешла на Qt.

Пример первой программы можно посмотреть на Википедии.

Fast Light Toolkit

Логотип FLTK — лёгкого графического тулкита для C++

FLTK (произносится как «‎фуллтик») — графическая библиотека, которая работает на Windows, Linux (X11) и Mac OS. Поддерживает 3D графику с помощью OpenGL и имеет встроенный GLUT симулятор. Есть встроенный софт для создания интерфейсов — FLUID. Документация по библиотеке находится здесь.

Nana

Логотип Nana — современной C++ библиотеки для GUI

Nana — это кроссплатформенная библиотека для программирования GUI в стиле современного C++. Поддерживаемые системы: Windows, Linux (X11) и Mac OS (экспериментально). Поддержка С++11\17 даёт возможность использовать современные фичи C++: лямбды, умные указатели и стандартную библиотеку. Так как это не фреймворк, использование Nana не будет оказывать влияния на архитектуру программы.

Здесь можно посмотреть документацию и примеры.

Часто задаваемые вопросы

Какую графическую библиотеку C++ выбрать новичку?

Для начинающих лучше всего подойдёт SFML — она требует минимальных знаний C++ и позволяет написать первое графическое приложение буквально за минуту. Если нужно создавать десктопные приложения с GUI, стоит обратить внимание на Qt — у неё обширная документация и большое сообщество.

Чем отличается Qt от GTK+?

Qt — коммерческий продукт с открытым исходным кодом, расширяет C++ мета-объектным компилятором и предоставляет собственные IDE. GTK+ изначально создавался как свободная альтернатива Qt, лучше всего работает на Linux и поддерживает язык C. Обе библиотеки кроссплатформенные, но Qt обеспечивает более единообразное поведение на разных ОС.

Какую библиотеку использовать для разработки игр на C++?

Для 2D-игр подойдут SFML и SDL — обе библиотеки предоставляют низкоуровневый доступ к графике, звуку и вводу. Для мобильных игр стоит рассмотреть Cocos2D-X с его конструктором Cocos Creator. Для крупных проектов с 3D-графикой и анимацией лучше использовать полноценные движки вроде Unity или Unreal Engine.

Существуют ли GUI-библиотеки для C++ с поддержкой современного стандарта C++17/20?

Да, библиотека Nana специально разработана для использования с современным C++ (C++11/17) и поддерживает лямбды, умные указатели и стандартную библиотеку. При этом Nana не является фреймворком, поэтому не навязывает архитектуру проекту.

Заключение

Всегда следует учитывать особенности той или иной технологии. Выпишите список функций своего приложения, ещё раз прочитайте описания всех графических библиотек C++, и только после этого выбирайте то, что подойдёт вам больше всего.