- WxWidgets – библиотека инструментов для создания GUI-приложений
- Почему именно wxWidgets?
- Примеры приложений, созданных на wxWidgets
- Сборка wxWidgets под Linux
- Заключение
- CodeBlocks Setup Guide
- Contents
- Code::Blocks Wiki
- Code::Blocks Installation in Windows
- Preparing Code::Blocks
- Building wxWidgets from the command line
- Downloading the last stable wxWidgets library
- Building your own wxWidgets library
- Copying libraries
- Setting Up Code::Blocks
- Compiler/Linker Options
WxWidgets – библиотека инструментов для создания GUI-приложений
Для разработки и реализации графического пользовательского интерфейса (GUI) в настоящее время существуют разные инструменты. Как правило, такие инструменты представляют собой фреймворк (библиотека специализированных программных инструментов), для функционирования и использования которого необходима соответствующая среда рабочего окружения. Такая ситуация например, с окружением JRE для написания GUI на Java. Примерно то же самое и с .Net – огромный неповоротливый фреймворк. В итоге, многие программисты задумываются над поиском более независимого, лёгкого и универсального инструмента. Желательно такого, чтобы для запуска и работы приложений на его основе не нужно было его «носить с собой». Именно такой альтернативой и является библиотека wxWidgets. В данной статье будут рассмотрены основные возможности этой библиотеки, а также её сборка для Linux-систем.
Почему именно wxWidgets?
Несмотря на то, что wxWidgets не является такой популярной, как .Net, Qt иди Java, однако возможности этой библиотеки куда более привлекательны, особенно для тех разработчиков, которые ценят качественную переносимость приложений между платформами, а также скорость их работы и потребление ресурсов.
Фреймворк .Net довольно тяжёл. Производительность приложений на основе .Net оставляет желать лучшего. Совместимость с UNIX-подобными системами для него также является проблемой. И это направление в виде платформы Mono представляется далеко не самым перспективным.
Qt-фреймворк, основанный на C++, хоть и является более быстрым и переносимым по сравнению с .Net, однако не совсем ясна ситуация с его лицензией. Существует открытая и коммерческая лицензии этого инструментария. Что, очевидно, налагает некоторые ограничения на использование свободной его версии. Иначе бы параллельно не существовало коммерческой ветки с более широкими возможностями. Этот факт также заставляет сомневаться относительно перспектив проектов на Qt. В техническом же отношении, этот фреймворк не обеспечивает полноценный нативный внешний вид приложений. Контроллы и элементы управления выглядят несколько иначе, нежели отрисовываемые средствами WinAPI в Windows или на GTK в UNIX-системах. Зачастую, это смущает и отпугивает пользователей.
Приложения на Java работают как минимум в полтора раза медленнее, чем на C/C++. Это далеко не секрет. Так же, как и то, что приложения, созданные на основе Java-апплетов внешне никак не вписываются в нативный стиль оформления ни одной из платформ. Пользователям не нравится работать с необычно и даже коряво выглядящими элементами интерфейса Java-приложений. При этом, как и в случае с .Net, необходимо всюду, на любой используемой платформе иметь установленную среду JRE для работы Java-апплетов. Именно такая возня и отталкивает многих разработчиков от использования Java.
Практически всех вышеперечисленных недостатков лишена wxWidgets – абсолютно открытая и свободная библиотека, которая способна отрисовывать GUI с помощью API платформы. Это значит, что окна приложений на wxWidgets и элементы интерфейса выглядят стандартно, гармонично вписываясь в оформление рабочего стола используемой платформы. При этом скорость работы и производительность таких приложений действительно впечатляет. Сама же библиотека написана на C++ и представляет собой набор классов, реализующих весь функционал библиотеки. Эти классы подключаются к проектам и используются как базовые, для создания приложений. Основными преимуществами wxWidgets над другими аналогами являются:
- быстродействие и производительность, ведь инструкции о рисовании элементов интерфейса транслируются непосредственно к стандартному API платформы без каких-либо промежуточных программных интерфейсов и сред;
- отсутствие обязательной предустановки wxWidgets – просто собрал и используй, подключая заголовочные файлы и файлы библиотек к проекту;
- сравнительно небольшой размер собранных приложений, даже при их статической линковке;
- быстрое создание GUI вручную из кода, без использования RAD-утилит, которые, кстати, для wxWidgets тоже существуют, например wxSmith в Code::Blocks IDE, wxFormBuilder или wxCrafter в CodeLite IDE.
Стоит еще раз обратить внимание на то, как wxWidgets рисует элементы управления интерфейса. Приложение, написанное на wxWidgets, которое скомпилировано в Windows, будет отображаться стандартными средствами WinAPI. Код того же самого приложения, без каких-либо изменений, но скомпилированный под UNIX будет рисоваться также стандартными средствами, т. е. на GTK. Можно даже собрать GUI на wxWidgets так, что оно будет использовать самый, что ни на есть чистейший X11. И это без изменения кода. Вот, что такое по-настоящему качественная переносимость.
Кроме богатых возможностей создания GUI wxWidgets имеет и ряд других функций, таких как работа с сокетами, регулярными выражениями, работа с базами данных (БД), HTTP-сервер, клиенты HTTP и FTP обработка XML и полноценная поддержка графических библиотек, таких как OpenGL.
Казалось бы, почему при всех своих достоинствах, wxWidgets практически непопулярен? Во-первых, это проект, который начинался всего одним человеком. В 1992 году над ним начал работать его создатель — Джулиан Смарт. Он и в настоящее время занимается поддержкой wxWidgets, но уже в составе небольшой группы. Таким образом, wxWidgets – это продукт творчества, а не коммерческий проект, над которым работает армия программистов и который продвигается благодаря рекламным кампаниям. Это и есть главный недостаток wxWidgets. И как следствие — небольшое количество обучающих и поддерживающих ресурсов. Основными из которых являются официальный ресурс вики, а также форумы сообщества.
Примеры приложений, созданных на wxWidgets
Несмотря на не самую выдающуюся популярность, приложений на основе wxWidgets достаточно много. Среди таковых, кстати, есть и снискавшие уважение пользователей, например Code::Blocks IDE:
Рис. 1: Среда разработки Code::Blocks IDE в Windows 7.
Существует также ещё одна IDE, подобная Code::Blocks. Но с более изящным оформлением, удобным функционалом и несколько более дружественным GUI – это CodeLite:
Графический интерфейс популярного кроссплатформенного FTP-клиента FileZilla также написан на wxWidgets:
Популярным бесплатным звуковым редактором, доступным для всех платформ является Audacity, который, как можно догадаться, для отображения GUI использует библиотеку wxWidgets:
Рис. 2: Кроссплатформенная среда разработки CodeLite IDE в KDE.
Сборка wxWidgets под Linux
Для своей компиляции библиотека wxWidgets не требует сторонних или дополнительных зависимостей. Для начала нужно скачать архив с исходными текстами библиотеки:
Распаковка загруженного архива:
Содержимое архива будет распаковано в поддиректорию wxWidgets-3.0.4 текущего каталога. Теперь нужно перейти в каталог с исходниками и создать в нём директорию для сборки, например gtk-build:
Далее, необходимо сконфигурировать будущую сборку, выполнив скрипт конфигурации, передав ему необходимые параметры:
Назначение указанных параметров следующее:
- –-with-gtk3 — включение поддержки GTK версии 3;
- –-disable-shared — включение статической линковки, при которой библиотеки wxWidgets будут включены в исполняемый файл;
- —enable-unicode – поддержка Юникода в приложении;
- —with-opengl – поддержка графической библиотеки OpenGL, на случай, если кому-то нужно написать свой игровой движок;
- —prefix=PATH – здесь (вместо PATH) указывается желаемое расположение библиотеки в файловой системе. Т. е. куда она будет впоследствии установлена;
- —with-libmspack – поддержка форматов сжатия Microsoft, таких как *.CAB, *.CHM и т. д., для большей кроссплатформенности не помешает;
- —with-sdl – поддержка библиотеки SDL для создания графического контекста окон и фреймов, когда не хочется это делать вручную.
Приведённый перечень параметров сборки является наиболее универсальным и позволяет создавать практически любые приложения на wxWidgets. В результате вывод команды (несколько последних строк) configure должен быть примерно таким:
Если сборка завершилась ошибкой установите необходимые пакеты и библиотеки, например в убунту
Теперь можно приступить непосредственно к сборке:
Здесь ключ -j — это количество потоков для одновременной обработки нескольких задач сборки. В случае, когда используется 8-ядерный/16-поточный процессор, такой как например, AMD Ryzen 7 2700, можно указать -j16. Чем больше потоков, тем быстрее сборка.
Далее, после окончания сборки, самое время установить готовую библиотеку wxWidgets:
В результате файлы библиотеки и файлы заголовков будут скопированы в соответствии с указанным на этапе конфигурирования, в параметре —prefix значением — в /opt/wxwidgets-gtk3/ . Если нужно, чтобы библиотека устанавливалась там же, где и была собрана, то следует задать —prefix=$(pwd) .
Далее, для удобства можно установить переменную окружения, чтобы использовать служебную команду wx-config, добавив в файл
/.bashrc строку, перезапустив после этого сеанс пользователя:
Проверка, что всё работает:
Команда ws-config используется для определения путей подключения заголовочных файлов и библиотек. Которые необходимы для указания компилятору и линковщику. Так, например, для того, чтобы скомпилировать проект на wxWidgets. Необходимо передать компилятору то, что возвращает команда wx-config:
Здесь параметры «—cxxflags» и «—libs» указывают, что команда wx-config должна возвратить требуемый для удачной сборки набор флагов компилятора и пути подключения заголовочных файлов и библиотек wxWidgets.
Заключение
В заключение важно заметить, что библиотека wxWidgets поставляется в готовом виде практически в любом из дистрибутивов Linux. Однако далеко не всегда это универсальные сборки. Часто бывает, особенно это касается сложных проектов, что необходимо пересобрать wxWidgets с нужными параметрами. Задействовав таким образом дополнительные возможности, которых нет в стандартной сборке из репозитория дистрибутива. Для того, чтобы узнать, какие параметры сборки и возможности доступны, нужно выполнить команду ../configure —help в каталоге сборки wxWidgets. В результате будет выведен список доступных параметров и их назначение.
Как можно видеть, wxWidgets – это действительно универсальная и по-настоящему кроссплатформенная библиотека. Которая является достойным (если не самым лучшим) выбором для создания быстрых и платформонезависимых приложений любой сложности и направленности.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
CodeBlocks Setup Guide
Contents
Code::Blocks Wiki
Code::Blocks’ wiki has a good guide on setting up wxWidgets on Code::Blocks: http://wiki.codeblocks.org/index.php?title=WxWindowsQuickRef
Code::Blocks Installation in Windows
This page describes the steps I took in order to get Code::Blocks working with a homemade wxWidgets. I used the Code::Blocks+MINGW 1.0 bundle and wxWidgets 2.6.
NOTE: This guide is for compiling with MINGW, not Cygwin nor MSYS.
Preparing Code::Blocks
- Download Code::Blocks with the MINGW bundle from http://www.codeblocks.org
- Install Code::Blocks
Building wxWidgets from the command line
Downloading the last stable wxWidgets library
The last stable wxWidgets distribution can be found at the wxWidgets website (https://www.wxwidgets.org/downloads/). You can choose between an installer and a zip file. You can just get the zip file because the installer is also a zipped version.
If you use the plain zip version, make sure to unzip using full paths. Otherwise the directories won’t be created correctly.
NOTE: In the rest of these instructions I’ll be calling the wxWidgets directory %WXWIN% you have to change it to your own directory. (e.g. «c:\wxWidgets-x.x»)
Building your own wxWidgets library
Before anything, add the bin directory of MinGW under the CodeBlocks installation directory to the %PATH% variable (Windows, Mac). Now it is time to compile wxWidgets, open the command promt and change to the wxWidgets directory:
Now we are on the right place we are first going to clean up the source:
NOTE: if you still have problems with compiling after cleaning, you may want to remove the directory in the build\msw directory. (it contains object files. ) When everything is clean we can compile wxWidgets:
First we have to configure the build. If your makefile.gcc (in my version on line 7) includes config.gcc, your command line parameters will be overriden by the config-file. Thus edit the compiler settings in config.gcc to reflect your choice. The following are recommended: USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=release UNICODE=0
Otherwise, you can build wxWidgets from the commandline as follows:
Now you can get a cup of coffee, or do something else, because this could take a long time.
NOTE: If you mess up and want to clean, you have to pass the same parameters to make clean.
Example for clean commandline:
So now everything is compiled for using codeblocks.
Copying libraries
When compilation is finished it is useful to copy the libs to another directory. By doing this you can make several builds (e.g. debug and release).
- So first we create a directory this could be done in %WXWIN%\lib.
- Then we go to the directory %WXWIN%\lib\gcc_dll (could called diffrent when you changed the build options)
- Rename the directory %WXWIN%\lib\gcc_dll to the directory of your choice. (For me it is %WXWIN%\lib\gcc_dllNonUnicode)
NOTE: Make sure everything is removed from the directory %WXWIN%\lib\gcc_dll else you can get trouble when compiling another version.
Setting Up Code::Blocks
Compiler/Linker Options
Next you should set up Code::Blocks to use the wx-config compiler and linker arguments. The easiest way to do this is to create new compiler flags, which can be turned on or off as needed later on.
Create a wxWidgets Compiler Flag
- Go to Project —> Build Options
- Under Compiler flags —> General, right-click an item and select «New flag. » from the shortcut menu.
- For the Name field, enter something like, «wxWidgets — Compiler Suggested Settings».
- For the Compiler flags field, enter
- Press OK
Create a wxWidgets Linker Flag
- Under Compiler flags —> General, right-clicking an item and select «New flag. » from the shortcut menu.
- For the Name field, enter something like, «wxWidgets — Linker Suggested Settings».
- For the Linker flags field, enter
- Press OK
Now that you have setup the compiler/linker flags, make sure to turn them on under Project —> Build Options —> YourProjectName for wxWidgets projects you wish to build.
Источник