C графический интерфейс: Как создать GUI на чистом C? — Хабр Q&A

Содержание

Как построить графический пользовательский интерфейс в C++?

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

Каждая операционная система имеет свой собственный набор инструментов GUI, набор заголовочных файлов и вызовов API, а также свой собственный способ выполнения задач. Существуют также кросс-платформенные наборы инструментов , такие как GTK, Qt и wxWidgets , которые помогают создавать программы, работающие в любом месте. Они достигают этого, имея одни и те же вызовы API на каждой платформе, но различную реализацию для тех функций API, которые обращаются к собственным вызовам OS API.

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

Основная идея там несколько сложна, и ее трудно сжать, но по сути это означает, что в вашем основном классе/основной функции происходит не так уж много, за исключением:

  • проверьте очередь событий, если есть какие-либо новые события
  • если есть, Отправьте эти события соответствующим обработчикам
  • когда вы закончите, верните управление обратно в операционную систему (обычно с помощью какого-то специального вызова функции «sleep», «select» или «yield»)
  • затем функция yield вернется, когда операционная система будет закончена, и у вас будет еще один обход цикла.

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

Вы должны иметь в виду, что программирование GUI в целом невероятно сложное и трудное. Если у вас есть такая возможность, то на самом деле гораздо проще просто интегрировать встроенный webserver в вашу программу и иметь интерфейс HTML/web. Единственное исключение, с которым я столкнулся, — это учебники Apple Cocoa + Xcode +interface builder+, которые делают его легко доступной средой для людей, впервые знакомых с программированием GUI, которые я видел.

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

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

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

      1. SFML
      2. Qt
      3. Cairo
      4. Cocos2D-X
      5. Juce
      6. wxWidgets
      7. SDL 2.0
      8. GTK+
      9. Заключение

SFML

SFML (Simple and Fast Multimedia Library) — одна из самых удобных и быстрых графических библиотек для C++. Её неоспоримое преимущество — минимальные требования к уровню знаний языка и лёгкость освоения: всего за несколько дней можно написать вполне полноценную программу.

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

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

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

Qt

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

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+

Пожалуй, одна из самых известных графических библиотек. 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

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

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

Заключение

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

Введение в разработку графического интерфейса

Для выполнения программы в среде IDE выполните следующие действия:

  1. Выберите Run («Запуск») > Run Main Project («Запуск главного проекта») (как вариант, нажмите F6).

Примечание. При открытии окна с указанием того, что для Project NumberAddition не задан основной класс, следует выбрать my.NumberAddition.NumberAdditionUI в качестве основного класса в том же окне и нажать кнопку ОК.

Для запуска программы вне среды IDE выполните следующие действия:

  1. Для сборки архива JAR приложения выберите «Run > Clean and Build Main Project» (Shift-F11).

  2. При помощи проводника по файловой системе или диспетчера файлов перейдите в каталог ` NumberAddition/dist`.

Примечание. Местоположение каталога проекта NumberAddition зависит от пути, указанного при создании проекта в шаге 3 в разделе Упражнение 1. Создание проекта.

  1. Дважды щелкните файл NumberAddition.jar.

Через несколько секунд приложение запустится.

Примечание. Если при двойном щелчке файла JAR не выполняется запуск приложения, дополнительные сведения о настройке связей файлов JAR в используемой операционной системе см эту статью.

Можно также запустить приложение из командной строки.

Для запуска приложения из командной строки выполните следующие действия:

  1. Вызовите командную строку или окно терминала.

  2. В командной строке измените текущий каталог на каталог NumberAddition/dist.

  3. В командной строке введите следующий оператор:

java -jar  NumberAddition.jar

Примечание. Убедитесь, что my.NumberAddition.NumberAdditionUI задан как основной класс до запуска приложения. Для провери этого, щелкните правой кнопкой узел мыши узел проекта NumberAddition на панели ‘Проекты’, выберите ‘Свойства’ во всплывающем меню и выберите категорию ‘Выполнить’ в диалоговом окне ‘Свойства проекта’. В поле ‘Основной класс’ должно отображаться my.numberaddition.NumberAdditionUI .

Запуск приложений с графическим интерфейсом Linux с помощью WSL

  • Чтение занимает 4 мин

В этой статье

Теперь можно предварительно просмотреть подсистему Windows для Linux (WSL) для запуска приложений с графическим пользовательским интерфейсом Linux (X11 и Вайланд) в Windows в полностью интегрированном рабочем столе.

WSL 2 позволяет приложениям с графическим интерфейсом Linux работать в собственном и естественном виде для Windows.

  • Запуск приложений Linux из меню «Пуск» Windows
  • Закрепление приложений Linux на панели задач Windows
  • Переключение между приложениями Linux и Windows с помощью клавиш ALT + TAB
  • Вырезать и вставить в приложениях Windows и Linux

Теперь вы можете интегрировать приложения Windows и Linux в рабочий процесс для удобства работы в рабочем столе.

Установка поддержки для приложений с графическим интерфейсом Linux

Предварительные требования

  • Windows 10 Предварительная версия сборки 21362 +

    Поддержка приложений с графическим интерфейсом Linux через WSL станет общедоступной в следующем основном выпуске Windows. Чтобы получить доступ к предварительной сборке Windows и попытаться запустить приложения с графическим интерфейсом Linux сейчас, необходимо присоединиться к программе предварительной оценки Windows и запустить сборку предварительной версии Windows 10 Insider Preview из канала разработки.

  • Установленный драйвер для GPU

    Чтобы запустить приложения для графического пользовательского интерфейса Linux, сначала необходимо установить драйвер предварительной версии, соответствующий вашей системе. Это позволит использовать виртуальный графический процессор (GPU), чтобы можно было воспользоваться преимуществами визуализации OpenGL с аппаратным ускорением.

Новая установка — нет предыдущей установки WSL

Если вы еще не выполнили действия по установке WSL, можно использовать новую упрощенную команду install.

  1. Откройте окно командной строки с правами администратора.

    Нажмите кнопку Пуск, введите PowerShell, щелкните правой кнопкой мыши Windows PowerShell и выберите Запуск от имени администратора.

  2. Выполните эту команду и перезагрузите компьютер при появлении запроса:

    wsl --install -d Ubuntu
    
  3. После завершения перезагрузки компьютера установка продолжится, и вам будет предложено ввести имя пользователя и пароль. Это будут учетные данные Linux для дистрибутива Ubuntu.

Теперь вы готовы приступить к использованию приложений с графическим интерфейсом Linux на WSL!

Существующая установка WSL

Если на компьютере уже установлен WSL, можно выполнить обновление до последней версии, которая включает поддержку графического пользовательского интерфейса Linux, выполнив команду Update из командной строки с повышенными привилегиями.

  1. Нажмите кнопку Пуск, введите PowerShell, щелкните правой кнопкой мыши Windows PowerShell и выберите Запуск от имени администратора.

  2. Введите команду WSL Update:

    wsl --update
    
  3. Чтобы обновление вступило в силу, необходимо перезапустить WSL. Вы можете перезапустить WSL, выполнив команду shutdown в PowerShell.

    wsl --shutdown
    

Примечание

Приложения с графическим интерфейсом Linux поддерживаются только с WSL 2 и не будут работать с дистрибутивом Linux, настроенным для WSL 1. Узнайте , как изменить дистрибутив с WSL 1 на WSL 2.

Запуск приложений с графическим пользовательским интерфейсом Linux

Для загрузки и установки популярных приложений Linux можно выполнить следующие команды в терминале Linux. При использовании другого дистрибутива, отличного от Ubuntu, он может использовать диспетчер пакетов, отличный от apt. После установки приложения Linux его можно найти в меню » Пуск » под именем распространения. Например: Ubuntu -> Microsoft Edge.

Обновление пакетов в дистрибутиве

sudo apt update

Установка Gedit

Gedit является текстовым редактором по умолчанию среды GNOME Desktop.

sudo apt install gedit -y

Чтобы запустить файл bashrc в редакторе, введите: gedit ~/.bashrc

Установка ГИМП

ГИМП — это свободный графический редактор с открытым исходным кодом, который используется для обработки изображений и редактирования изображений, рисования произвольной формы, перекодирования между различными форматами файлов изображений и более специализированных задач.

sudo apt install gimp -y

Для запуска введите: gimp

Установка Наутилус

Наутилус, также известные как файлы GNOME, — это диспетчер файлов для рабочего стола GNOME. (Одинаковые в Проводник файлов Windows).

sudo apt install nautilus -y

Для запуска введите: nautilus

Установка Влк

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

sudo apt install vlc -y

Для запуска введите: vlc

Установка приложений X11

X11 — это система окон Linux, которая представляет собой набор приложений и средств, поставляемых с ней, таких как ксклокк, кскалк калькулятор, ксклипбоард для вырезания и вставки, Ксев для тестирования событий и т. д. Дополнительные сведения см. в документации по x.org .

sudo apt install x11-apps -y

Для запуска введите имя инструмента, который вы хотите использовать. Пример.

Установка Google Chrome для Linux

Чтобы установить Google Chrome для Linux, выполните следующие действия.

  1. Измените каталоги во временную папку: cd /tmp
  2. Используйте wget, чтобы скачать его: sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  3. Получить текущую стабильную версию: sudo dpkg -i google-chrome-stable_current_amd64.deb
  4. Исправьте пакет: sudo apt install --fix-broken -y
  5. Настройте пакет: sudo dpkg -i google-chrome-stable_current_amd64.deb

Для запуска введите: google-chrome

Установка Microsoft Teams для Linux

Чтобы установить Microsoft Teams для Linux, выполните следующие действия.

  1. Измените каталоги во временную папку: cd /tmp
  2. Используйте фигурную скобку для скачивания пакета: sudo curl -L -o "./teams.deb" "https://teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb"
  3. Для установки используйте apt: sudo apt install . /teams.deb -y

Для запуска введите: teams

Установка браузера Microsoft ребра для Linux

Чтобы установить Microsoft ребр для Linux, выполните следующие действия.

  1. Используйте фигурную скобку для скачивания пакета: sudo curl https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_91.0.852.0-1_amd64.deb -o /tmp/edge.deb
  2. Для установки используйте apt: sudo apt install /tmp/edge.deb -y

Для запуска введите: microsoft-edge

Windows 10 получила поддержку Linux-приложений с графическим интерфейсом

Стало известно о том, что Microsoft приступила к тестированию функции запуска Linux-приложений с графическим интерфейсом (GUI) в Windows 10. Такая возможность стала доступна участникам инсайдерской программы Microsoft, использующим сборку Windows 10 под номером 21364.

Появление поддержки Linux-приложений с GUI является значительным расширением возможностей подсистемы Windows Subsystem for Linux. Благодаря ей пользователи теперь могут запускать непосредственно в Windows редакторы графического интерфейса, инструменты и приложения, предназначенные для создания и тестирования Linux-приложений. Несмотря на то, что и ранее пользователи могли запускать приложения для Linux в Windows с помощью сторонних X-серверов, официальная поддержка со стороны Microsoft означает появление аппаратного ускорения графики, благодаря чему приложения будут работать без сбоев. Поддержка микрофона и вывода звука также присутствует, поэтому Linux-разработчики могут без проблем запускать и тестировать видеоплееры и коммуникационные приложения.

Пользователям больше не нужно использовать стороннее программное обеспечение для взаимодействия с приложения для Linux в Windows 10. Когда происходит запуск Linux-приложения с GUI, операционная система автоматически запускает сопутствующий системный дистрибутив, содержащий Wayland, X-сервер и все остальные компоненты, необходимые для обеспечения плавной и стабильной работы внутри Windows. Как только пользователь завершает работу приложения и подсистемы WSL, системный дистрибутив также выгружается. Все эти компоненты объединены для того, чтобы максимально упростить запуск Linux-приложений с GUI параллельно со стандартным программным обеспечением для Windows.

Если вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

Урок № 26. Первое графическое приложение


Создание первого приложения с графическим интерфейсом

Доброго времени суток! В этом уроке мы создадим Ваше первое приложение с графическим интерфейсом в MS Visual Studio. Это будет своего рода «Hello World» для графических приложений. Скажу сразу, что использование Windows Forms — не единственный способ создания графических приложений (приложения с графическим интерфейсом пользователя) для C# программистов, но начать изучение лучше именно с этого. И так, запускаем Visual Studio.

Запустили? Тогда к делу! Идем в главное меню и выбираем пункт «Файл — Создать — Проект», как показано на рисунке ниже.

Создание нового проекта

В появившемся окне:

  • в левой части выбираем «Шаблоны — Visual C# — Windows»;
  • в основной области выбираем элемент «Приложение Windows Forms»;
  • в нижней части окна вводим имя проекта и указываем его расположение на диске.

В общем, как показано на рисунке ниже.

Опции создания проекта

Указали что нужно? Тогда нажимайте на кнопку «OK». Теперь вы должны увидеть примерно следующее (основные области выделены прямоугольниками):

Только что созданный проект

На рисунке выше, я обозначил основные области: область дизайнера (слева вверху), область обозревателя решений (справа вверху) и область свойств (справа внизу). С этими областями, мы будем работать чаще всего.

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

Для этого, выделим в дизайнере форму (для этого, можно просто кликнуть левой кнопкой мыши по форме) и перейдем в блок свойств, в котором найдем строку «Text» (слово текст, ищем в левом столбце), как показано на рисунке ниже.

Свойство «Text» основной формы приложения

Обратите внимание, в левом столбце указано имя (название свойства), а в правом — его значение.

В данном случае, мы имеем дело с текстовым свойством, и его значение, отображается в заголовке окна, так что, давайте теперь укажем там что-то свое, например, что-то вроде: «Главное окно», как показано на рисунке ниже:

Установка свойства формы

Теперь, можно собрать проект и запустить. Для этого идем в главное меню и выбираем пункт «Сборка — Собрать решение». А потом запускаем приложение, для этого выбираем пункт «Отладка — Запуск без отладки» в главном меню. В результате Вы должны увидеть окно следующее окно.

Окно первого графического приложения

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

Перейти к следующему уроку

Общие рекомендации по разработке графического интерфейса

Под графическим интерфейсом пользователя (Graphical User Interface — GUI) подразумевается тип экранного представления, при котором пользователь может выбирать команды, запускать задачи и просматривать списки файлов, указывая на пиктограммы или пункты в списках меню, показанных на экране. Действия могут, как правило, выполняться с помощью мыши, либо нажатием клавиш на клавиатуре. Типичным примером графического интерфейса пользователя является Windows.

С++ Builder предоставляет разработчику приложения широкие возможности быстрого и качественного проектирования графического интерфейса пользователя различных окон, кнопок, меню и т.д. Так что разработчик может в полной мере проявить свою фантазию. Но полеты фантазии очень полезно ограничивать. Есть определенные принципы построения графического интерфейса пользователя, и пренебрегающий ими обречен на то, что его приложение будет выглядеть чужеродным объектом в среде Windows.

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

Приложение не должно выбиваться из общего стиля Windows ни своим внешним видом (шрифтами, цветом, меню), ни организацией диалогов. Фантазию надо обращать на построение эффективных и надежных алгоритмов функционирования, а не на экзотическое оформление приложения.

Фирма Microsoft предложила спецификации для разработки программного обеспечения Windows, направленные на то, чтобы пользователь не тратил время на освоение нюансов пользовательского интерфейса новой программы, чтобы он смог как можно скорее продуктивно применять ваше приложение. Эти спецификации образуют основу программы логотипа Windows, проводящейся Microsoft. Чтобы вы могли поставить на свой программный продукт штамп «Разработано для Windows», ваша программа должна удовлетворять определенным критериям. Когда вы видите этот логотип на каком-то изделии, аппаратном или программном, вы можете быть уверены, что оно будет работать нормально в среде Windows.

Конечно, вряд ли вы будете очень озабочены приобретением официального права на логотип Windows, если только не разработали сногсшибательную программу широкого применения, которую надеетесь успешно продавать на международном рынке. Но прислушаться к рекомендациям по разработке графического интерфейса пользователя в любом случае полезно. Они основаны на психофизиологических особенностях человека и существенно облегчат жизнь будущим пользователям вашей программы, увеличат производительность их работы.

Работая с различными программами Windows, графический интерфейс пользователя любой серьезной программы должен включать в себя:

  • Главное меню. Реализуется компонентом MainMenu или с помощью компонентов ActionManager и ActionMainMenuBar.
  • Инструментальную панель быстрых кнопок, дублирующих основные разделы меню. Чаще всего это компонент ToolBar. Если панель большая, то целесообразно использовать ее совместно с компонентом PageScroller, обеспечивающим ее автоматическую прокрутку, Если у вас несколько инструментальных панелей и желательно дать пользователю возможность их перестроения, то панели ToolBar целесообразно размещать в компонентах CoolBar или ControlBar. Панель, настраиваемую пользователем, проще всего делать на основе компонентов ActionManager и ActionToolBar.
  • Контекстные меню (реализуется компонентом PopupMenu), всплывающие при щелчке пользователя правой кнопкой мыши на том или ином компоненте.
  • Продуманную последовательность переключения фокуса управляющих элементов.
  • Клавиши быстрого доступа ко всем разделам меню и всем управляющим элементам, «горячие» клавиши для доступа к основным командам.
  • Ярлычки подсказок, всплывающие при перемещении курсора мыши над быстрыми кнопками и иными компонентами.
  • Полосу состояния (реализуется компонентом StatusBar), используемую для развернутых подсказок и выдачи различной информации пользователю.
  • Файл справки, темы которого отображаются при нажатии клавиши F1 или при выборе пользователем соответствующего раздела-меню.
  • Информацию о версии, доступную пользователю при щелчке на пиктограмме приложения правой кнопкой мыши.
  • Возможность настройки приложения и запоминания настроек, чтобы при очередном сеансе работы восстанавливались настройки, установленные в прошлом сеансе.
  • Средства установки приложения, регистрации его в Windows и удаления из Windows (это нужно для приложений, которые содержат не один, а несколько файлов. Для простых программ установка, регистрация и удаление не требует специальных средств).

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

Подготовил материал

Табаков Юрий

Программист

Автор и редактор проекта CuBook.PRO. Главная задача, которую я ставлю перед собой – донести до начинающих программистов удобочитаемый материал. Буду рад выслушать замечания и предложения. Не забываем ставить оценки и делать репосты =)


Как создать графический пользовательский интерфейс на C ++?

По сути, оконная система операционной системы предоставляет некоторые вызовы API, которые вы можете выполнять для выполнения таких задач, как создание окна или размещение кнопки в окне. По сути, вы получаете набор файлов заголовков и можете вызывать функции в этих импортированных библиотеках, как если бы вы делали это с stdlib и printf .

Каждая операционная система поставляется со своим собственным набором инструментов графического интерфейса пользователя, набором файлов заголовков и вызовов API, а также своим собственным способом работы.Существуют также кросс-платформенные инструменты, такие как GTK, Qt и wxWidgets, которые помогают создавать программы, которые работают где угодно. Они достигают этого, имея одни и те же вызовы API на каждой платформе, но разную реализацию для тех функций API, которые вызывают собственные вызовы API ОС.

У них всех будет одна общая черта, которая будет отличаться от программы CLI, — это то, что называется циклом событий. Основная идея здесь несколько сложна, и ее трудно сжать, но по сути это означает, что в вашем основном классе / основной функции не так уж много, за исключением:

  • проверить очередь событий на наличие новых событий
  • , если есть, отправьте эти события соответствующим обработчикам
  • , когда вы закончите, верните управление операционной системе (обычно с помощью специального вызова функции «сна», «выбора» или «выхода»).
  • , то функция yield вернется, когда операционная система завершит работу, и у вас будет еще один обход цикла.

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

Следует иметь в виду, что программирование графического интерфейса пользователя в целом невероятно сложно и сложно. Если у вас есть возможность, на самом деле намного проще просто интегрировать встроенный веб-сервер в вашу программу и иметь интерфейс на основе HTML / веб.Единственное исключение, с которым я столкнулся, — это Apple Cocoa + Xcode + interface builder + учебные пособия, которые делают его наиболее доступной средой для людей, плохо знакомых с программированием графического интерфейса.

5 Кросс-платформенных графических интерфейсов для C ++

C ++, как и Python и многие другие языки программирования, * не имеет встроенного графического интерфейса. Только в середине 1980-х операционные системы для ПК разработали подобные пользовательские интерфейсы, и даже после того, как Windows и различные операционные системы Apple стали нормой, программированию, управляемому событиями, потребовалось еще несколько лет, чтобы наверстать упущенное.

Тридцать лет назад весь ввод-вывод выполнялся на символьных дисплеях. Графические инструменты появились только в начале 90-х. С тех пор Mac OS (и, в меньшей степени, Linux) стала более важной по сравнению с Windows, что делает более выгодным вложение средств для создания программного обеспечения, которое может работать на всех трех платформах, не требуя перезаписи.

Без кросс-платформенных инструментальных средств вам пришлось бы существенно переписать для любой другой платформы только для обработки ввода-вывода и взаимодействия с пользователем.Между тем графика в каждой операционной системе выполняется совершенно по-разному. Кросс-платформенные инструменты защищают вас (в некоторой степени) от этих вариаций и странностей.

Возможно, вам никогда не понадобится переносить приложение Windows на Mac или Linux, но, по крайней мере, вы знаете, что можете. В этом списке я рассмотрю пять кроссплатформенных наборов инструментов с графическим интерфейсом, которые написаны на C ++ и все еще находятся в активной разработке. Я выбрал пять: Qt, wxWidgets, JUCE, CEGUI и CEF (некоторые другие, особенно GTK, MFC и Cocoa, не вошли в список, поскольку они не являются полностью кроссплатформенными).

Qt

Qt, одной из ранних фреймворков, исполнился 21 год. Ранее принадлежавшая Nokia, нынешним владельцем является финская компания Qt. Платформа лицензирована как бесплатная / с открытым исходным кодом и доступна в версиях Indie Mobile, Professional и Enterprise по цене от 79 долларов в месяц.

Этот старый фреймворк заново изобрел себя с его последним воплощением, Qt 5, который используется во всем, от мобильных приложений до автомобилей и медицинских устройств. Одной из его сильных сторон является оконная система, которая позволяет создавать пользовательские интерфейсы и включает расширенные функции, такие как отображение диаграмм, визуализации данных и карт от сторонних поставщиков.Qt версии 5 теперь обрабатывает прикосновения, а также мышь и клавиатуру, и вы можете добавлять виртуальные клавиатуры в X11 и Windows. В KDE Linux Qt — это собственная библиотека графического интерфейса, поэтому, если вы разрабатываете для платформ KDE, вам следует рассмотреть Qt.

wxWidgets

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

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

JUCE

Эта кроссплатформенная библиотека с открытым исходным кодом использует лицензию, аналогичную Qt. Он ориентирован на кроссплатформенные аудио, интерактивные, встроенные или графические приложения.

Первоначально разработанный британским разработчиком Жюлем Сторером, он был приобретен компанией Raw Material Software, занимающейся разработкой аудиопродукции. В результате JUCE имеет большое количество звуковых функций, потому что изначально он был разработан для создания звуковых приложений.

Библиотека JUCE также включает множество элементов пользовательского интерфейса, графику, звук, синтаксический анализ XML и JSON, сетевое взаимодействие, криптографию, многопоточность и интегрированный интерпретатор, имитирующий синтаксис ECMAScript.Это уменьшает или устраняет необходимость в сторонних библиотеках и проблем с зависимостями, которые они могут вызвать. Нет ничего более разочаровывающего, чем обновление стороннего набора инструментов, которое нарушает сборку.

JUCE также включает «introjucer», инструмент IDE, который может создавать проекты Xcode, проекты Visual Studio, файлы Makefile Linux, сборки Android Ant и проекты CodeBlocks.

CEGUI Графический интерфейс пользователя

Crazy Eddie находится в разработке с 2003 года и должен легко создать версию 1.0 к 2020 году, так как сейчас он составляет 0,87. Как и другие здесь, он работает в Windows, Mac и Linux и поддерживает как 64-, так и 32-разрядные версии. В отличие от остальных кроссплатформенных графических интерфейсов, здесь основное внимание уделяется разработке игр; но при этом он предоставляет разработчику набор виджетов (кнопки, комбо и т. д.), так что вы не ограничены только игровыми приложениями.

Для большинства игр требуется графический интерфейс для всех меню и экранов конфигурации, которые отображаются на таких платформах, как DirectX или OpenGL. Для них можно изменять скины, что позволяет настраивать их в соответствии с эстетикой вашей игры.

CEGUI Configuration также широко использует файлы XML. Они предназначены не только для настройки скинов (например, внешнего вида элементов управления, общей цветовой схемы и т. Д.), Но и всего остального, например анимации, изображений, макетов и схемы для управления файлами данных игры. Все они полагаются на XML.

CEF

Chromium Embedded Framework — это простая платформа для встраивания браузеров на основе Chromium в другие приложения. Это отличает его от других библиотек C ++, которые предназначены для создания автономных приложений.Возможно, вы не слышали об этом, но согласно документации, существует более 100 миллионов установленных экземпляров CEF, встроенных во многие продукты. Сейчас ему восемь лет, и он до версии 3.

Интеграция с вашим браузером Chrome позволяет получить доступ к JavaScript, ускорению графического процессора через WebGL, даже рендерингу во внеэкранную память и, вскоре, доступ к речевому вводу.

Заключение

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

И Qt, и wxWidgets охватывают множество схожих территорий, и это, вероятно, тот случай, который вы предпочитаете (или, если Qt, какую версию вы можете себе позволить). Создание коммерческих приложений с Qt будет стоить дорого, поэтому вы можете предпочесть wxWidgets.Обе платформы имеют множество сторонних инструментов для упрощения разработки.

Я включил CEF, потому что включение браузера в ваше настольное приложение может пригодиться, например, для отображения онлайн-документации, отображения ссылки на новости или отображения загрузки обновления. Точно так же, однажды написав простой графический интерфейс (на языке C) для игры несколько лет назад, я ценю усилия, которые были вложены в создание такого всеобъемлющего графического интерфейса, как графический интерфейс Crazy Eddie.

* В более ранней версии этой статьи ошибочно предполагалось, что на каком-то этапе своего существования Java не имела графического интерфейса пользователя.

библиотек пользовательского интерфейса C ++ • memdump

Список бесплатных кроссплатформенных решений с графическим интерфейсом для C ++. Если вам не нравится Qt или другие основные GUI-фреймворки, такие как wxWidgets или GTK, выбор, доступный вам, немного ошеломляет.

Если вам известны другие библиотеки пользовательского интерфейса C ++, не перечисленные здесь, живые или мертвые, дайте мне знать!

Здоровые проекты

На момент написания эти проекты находились в активной разработке. Список плюсов и минусов, конечно, неполный.Просто краткий обзор того, что я смог узнать о различных библиотеках. Там, где это уместно, они приправлены моим личным мнением.

Qt

В Qt есть все необходимое для быстрого и экономичного проектирования, разработки, тестирования, развертывания и сопровождения вашего программного обеспечения для любого проекта. Сосредоточьтесь на создании лучшего пользовательского опыта вместо того, чтобы кодировать то, что уже было написано для вас.

Плюсы
  • очень протестировано в боевых условиях / готово к производству
  • Конструктор IDE и пользовательского интерфейса
  • многие программисты на c ++ им доверяют
  • есть все необходимое
Минусы
  • огромный, тяжелый каркас
  • использует древние парадигмы
  • особенность ползучести, проект
  • стремится обогнать все ваши конструкции
  • медленно
  • Не нравится
Платформы
  • Linux, macOS, Windows
  • Android, iOS / tvOS / watchOS, WinRT
  • Встроенный Linux, INTEGRITY, QNX, VxWorks
Лицензия

Sciter

Встраиваемый движок HTML / CSS / скриптов для разработки современного пользовательского интерфейса.

Sciter позволяет использовать проверенные временем, надежные и гибкие HTML и CSS для определения графического интерфейса пользователя и рендеринга с ускорением графического процессора. Sciter Engine — это единая компактная DLL размером 5+ Мбайт. Приложения, использующие его, в 10+ раз меньше, чем приложения, построенные на Electron или Qt.

Плюсы
  • Боевые испытания / готово к производству
  • html, css, скрипты
  • очень прост в использовании, предлагает множество расширенных функций пользовательского интерфейса.
  • имеет инспектор DOM
Минусы
  • не с открытым исходным кодом, хотя двоичные файлы доступны бесплатно
  • Документация по
  • не очень хорошая
  • Экосистема инструментов
  • устарела
Платформы
  • Linux, macOS, Windows, WinRT
  • Предположительно Android, iOS
Лицензия

Графический интерфейс пользователя Noesis

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

Плюсы
  • Боевые испытания / готово к производству
  • впечатляющий список платформ и бэкендов
  • язык разметки
  • лучший в своем классе визуальный редактор (Microsoft Blend)
  • отличная документация с множеством примеров
Минусы
  • с закрытым исходным кодом, ограниченная бесплатная лицензия
  • Разработчики
  • и дизайнеры пользовательского интерфейса должны использовать Windows
  • тяжелая установка и интеграция
Платформы
  • Linux, macOS, Windows
  • Android, iOS,
  • UWP, Xbox One, PS4, Nintendo Switch, WebGL
Лицензия
  • коммерческая, бесплатно до 100 тыс. Евро

Уважаемый ImGui

Уважаемый ImGui — это библиотека графического пользовательского интерфейса для C ++ без лишних слов.Он выводит оптимизированные буферы вершин, которые можно визуализировать в любое время в приложении с поддержкой 3D-конвейера. Это быстрый, портативный, независимый от рендерера и автономный (без внешних зависимостей).

Плюсы
  • Боевые испытания / готово к производству
  • доступно на conan
  • минимальные зависимости
Минусы
Платформы
  • Linux, macOS, Windows
  • Android
Лицензия

Juce

JUCE упрощает создание универсального пользовательского интерфейса, который может работать на любой платформе и интегрировать OpenGL.JUCE обрабатывает механизмы 2D-рендеринга, обработку форматов изображений и функциональность шрифтов. Имея на выбор множество вариантов оформления, вы можете создавать великолепно выглядящие приложения, которые будут масштабироваться под любой размер экрана и работать на мобильных устройствах.

Плюсы
  • Боевые испытания / готово к производству
  • фантазии
Минусы
  • больше аудио фреймворка с пользовательским интерфейсом
  • тяжелый каркас (а-ля Qt)
Платформы
  • Linux, macOS, Windows
  • Android, iOS
Лицензия
  • коммерческая, бесплатно до 50 тыс. Долларов
  • GPL

виджетов

wxWidgets — это библиотека C ++, которая позволяет разработчикам создавать приложения для Windows, macOS, Linux и других платформ с единой базой кода.Он имеет популярные языковые привязки для Python, Perl, Ruby и многих других языков, и, в отличие от других кросс-платформенных инструментов, wxWidgets придает приложениям действительно естественный вид, поскольку он использует собственный API платформы, а не эмулирует графический интерфейс. Он также обширный, бесплатный, с открытым исходным кодом и зрелый.

Плюсы
  • Боевые испытания / готово к производству
  • Внешний вид платформы
  • с собственными виджетами
  • доступно на conan
Минусы
Платформы
Лицензия
  • Лицензия библиотеки wxWindows (аналог LGPL)

GTK +

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

Плюсы
  • Боевые испытания / готово к производству
Минусы
  • Строительство и соединение — это ад
  • выглядит мне
  • GNOME
  • Я лично не поклонник API
Платформы
Лицензия

гткмм

gtkmm — это официальный интерфейс C ++ для популярной библиотеки графического интерфейса GTK +.Основные моменты включают безопасные обратные вызовы и полный набор виджетов, которые легко расширяются с помощью наследования. Вы можете создавать пользовательские интерфейсы либо в коде, либо с помощью конструктора пользовательского интерфейса Glade, используя Gtk :: Builder. Имеется обширная документация, включая справочник по API и руководство.

Плюсы
  • Конструктор интерфейсов
  • указан на сайте Бьярна?
Минусы
Платформы
Лицензия

CEGUI

Система графического интерфейса Crazy Eddie представляет собой бесплатную библиотеку, обеспечивающую работу с окнами и виджеты для графических API / движков, где такая функциональность изначально недоступна или сильно отсутствует.Библиотека объектно-ориентирована, написана на C ++, кроссплатформенна, под лицензией MIT (бесплатно и с открытым исходным кодом) и ориентирована на разработчиков игр и приложений, которые должны тратить свое время на создание отличных игр, а не на создание подсистем графического интерфейса! Кроме того, он предлагает редактор WYSIWYG для создания макетов и наборов изображений.

Плюсы
  • Боевые испытания / готово к производству
  • wysiwyg редактор
Минусы
  • из прошлого опыта, боль построить и связать
Платформы
Лицензия

Набор инструментов Fox

FOX — это набор инструментов на основе C ++ для простой и эффективной разработки графических пользовательских интерфейсов.Он предлагает широкую и постоянно растущую коллекцию элементов управления и предоставляет современные средства, такие как перетаскивание, выбор, а также виджеты OpenGL для трехмерных графических манипуляций. FOX также реализует значки, изображения и удобные для пользователя функции, такие как справка по строке состояния и всплывающие подсказки. Всплывающие подсказки можно использовать даже для 3D-объектов!

Плюсы
  • Испытано в боевых условиях / готово к производству (используется в инструментах САПР)
Минусы
Платформы
  • Linux, macOS (X-сервер), Windows, несколько более старых версий UNIX
  • IRIX, HP-UX, Solaris / SunOS, AIX, DYNIX
Лицензия

MiniGUI

MiniGUI — это полная система поддержки встроенной графики, разработанная и оптимизированная для встроенных систем.В качестве промежуточного программного обеспечения между ОС и приложениями MiniGUI скрывает разнообразие различных базовых ОС и аппаратных платформ и предоставляет идентичные API-интерфейсы для приложений верхнего уровня.

Плюсы
  • Боевые испытания / готово к производству
  • wysiwig редактор пользовательского интерфейса
  • посмотрите на список поддерживаемых платформ!
  • заполняет встроенную нишу
Минусы
  • автоинструменты рак
  • кажется ограниченным из-за встроенного фокуса
Платформы
  • Linux, Windows
  • uClinux, eCos, uC / OS-II, VxWorks, pSOS, ThreadX, Nucleus
Лицензия

Nuklear

Это минимальный набор инструментов графического пользовательского интерфейса в режиме немедленного состояния, написанный на ANSI C и лицензированный как общественное достояние.Он был разработан как простой встраиваемый пользовательский интерфейс для приложения и не имеет каких-либо зависимостей, бэкэнда рендеринга по умолчанию или окна ОС и обработки ввода, но вместо этого предоставляет очень модульный библиотечный подход с использованием простого состояния ввода для ввода и команд рисования, описывающих примитивные формы как выход. Таким образом, вместо предоставления многоуровневой библиотеки, которая пытается абстрагироваться от нескольких платформ и визуализировать бэкенды, она фокусируется только на фактическом пользовательском интерфейсе.

Плюсы
  • одинарный заголовок: o
  • нет зависимостей
  • довольно
Платформы
  • Linux, macOS, Windows
  • Android
Лицензия

райгуи

Raygui — это простая и удобная в использовании библиотека с непосредственным режимом работы.raygui был создан как вспомогательный модуль для raylib для создания простых интерфейсов GUI с использованием графического стиля raylib (простые цвета, простые прямоугольные формы, широкие границы, шрифт raylib по умолчанию…). raygui предназначен для разработки инструментов; он уже использовался для разработки следующих инструментов: rFXGen, rTexViewer, rGuiStyler и rGuiLayout.

Плюсы
  • простой
  • довольно
  • много виджетов
  • API на основе хорошо известного Unit3D IMGUI (быстро изучить)
Минусы
  • «Raygui предназначен для разработки инструментов»
Платформы
  • Четко не указано, предполагается: Linux, macOS, Windows
Лицензия

NanoGUI

NanoGUI — это минималистичная кроссплатформенная библиотека виджетов для OpenGL 3.x или выше. Он поддерживает автоматическое создание макета, обратные вызовы лямбда-выражений C ++ 11 с отслеживанием состояния, множество полезных типов виджетов и рендеринг с поддержкой Retina на устройствах Apple благодаря NanoVG от Микко Мононена. Привязки Python для всех функций предоставляются с помощью pybind11.

Плюсы
  • очень красиво
  • функциональный API
Минусы
  • не исправили ад своих зависимостей (не обновили NanoVG)
Платформы
Лицензия

мкр

Крошечная портативная библиотека пользовательского интерфейса немедленного режима, написанная на ANSI C.

Плюсы
  • крошечный
  • память фиксированного размера (отлично подходит для встраиваемых систем)
Минусы
Платформы
  • Я предполагаю как минимум: Linux, macOS, Windows
Лицензия

U ++

U ++ — это кроссплатформенная среда быстрой разработки приложений C ++, ориентированная на продуктивность программистов. Он включает в себя набор библиотек (GUI, SQL и т. Д.) И интегрированную среду разработки.

Плюсы
Минусы
  • IDE?
  • тяжелый каркас (а-ля Qt)
Платформы
Лицензия

нана

Nana — это кроссплатформенная библиотека C ++ для создания графических пользовательских интерфейсов, в настоящее время она поддерживает платформы Windows, Linux (X11) и Mac OS (экспериментальная).

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

Плюсы
Минусы
Платформы
Лицензия

libui

Простая и переносимая (но не негибкая) библиотека графического интерфейса пользователя на языке C, в которой используются собственные технологии графического интерфейса пользователя каждой поддерживаемой платформы.

Плюсы
  • много привязок
  • выглядит родным
  • минимальные зависимости
Минусы
  • как указано автором, документации нет
Платформы
Лицензия

Агар

Agar (или libAgar) — это кроссплатформенный набор инструментов с графическим интерфейсом. Agar предоставляет базовую структуру и набор виджетов, из которых можно создавать графические приложения, которые изначально работают под X11, Windows, MacOS X, SDL и другими.Agar использует преимущества ускорения текстуры и графического процессора везде, где это возможно. Agar также может подключаться к существующему фреймбуферу, контексту SDL или OpenGL и работать как автономный оконный менеджер. Agar можно скомпилировать без зависимостей (хотя рекомендуется FreeType). API является потокобезопасным, если иное не указано в документации.

Плюсы
Минусы
Платформы
  • Linux, macOS, Windows
  • многие BSD, IRIX
Лицензия

FLTK

FLTK (произносится как «fulltick») — это кроссплатформенный набор инструментов графического интерфейса пользователя C ++ для UNIX® / Linux® (X11), Microsoft® Windows® и MacOS® X.FLTK обеспечивает современные функциональные возможности графического интерфейса без лишних слов и поддерживает трехмерную графику через OpenGL® и его встроенную эмуляцию GLUT.

Плюсы
  • легкий?
  • Конструктор пользовательского интерфейса
  • cmake
Минусы
Платформы
Лицензия

IUP

IUP — это многоплатформенный инструментарий для создания графических пользовательских интерфейсов. Он предлагает API на трех основных языках: C, Lua и LED. Его библиотека содержит около 100 функций для создания диалогов и управления ими.

Цель

IUP — позволить программе работать в разных системах без изменений — набор инструментов обеспечивает переносимость приложения. Поддерживаемые системы: GTK +, Motif и Windows.

Плюсы
  • на самом деле выглядит вполне законченным
Минусы
  • sourceforge в 2019 году !?
  • жестокое обращение с программистами
Платформы
  • Linux, Windows
  • BSD, SunOS, IRIX, AIX
Лицензия

Boost.UI

Boost.UI — это кроссплатформенная библиотека Boost пользовательского интерфейса (GUI) C ++, которая использует собственные виджеты, предоставляемые системой, имеет API-интерфейсы, подобные STL и Boost, совместима с другими библиотеками Boost и поддерживает современный C ++ 11 / 14/17 функций.

Плюсы
  • использует виджеты собственной платформы
Минусы
  • просто обертка вокруг wxWidgets
  • повысить клеймо
  • очень новый, не тестировался в боях
Платформы
Лицензия

LCUI

Небольшая библиотека C для создания пользовательских интерфейсов с помощью C, XML и CSS.

Плюсы
  • CSS
  • довольно
  • Загрузочный файл
  • доступен через LCUI.css
Минусы
  • личный проект (боевые испытания не прошли)
  • без аппаратного рендеринга (будет медленно)
  • нет ctrl-c, ctrl-v !?
Платформы
Лицензия

horus_ui

Библиотека HorusUI позволяет быстро разрабатывать графические интерфейсы для ваших приложений, используя простоту использования, обеспечиваемую концепциями графического интерфейса непосредственного режима.Нет необходимости разрабатывать макет графического интерфейса и писать много строк шаблонного графического интерфейса, imgui позаботится о макете и убедитесь, что каждый виджет, который вы добавляете в систему, имеет уникальный идентификатор, отображается и реагирует на события.

Плюсы
  • хорошо выглядит
  • имеет несколько приятных функций (собственные диалоговые окна файлов и осведомленность о разрешении).
Минусы
  • встраивает свои зависимости в дерево исходных текстов (аддон зависимости гарантирован)
  • премейк?
  • применяет загрузчик OpenGL и контекстную библиотеку (glew + SDL)
Платформы
Лицензия

GuiLite

GuiLite — это базовый UI-фреймворк с 5000 строками кода C ++, он работает на всех платформах (например.g, iOS, Android, Linux, Windows, macOS и контейнер Docker).

GuiLite является встраиваемым, он работает в других фреймворках пользовательского интерфейса (например, Qt, MFC, Winform, Cocoa). Вы можете использовать функции GuiLite и функции пользовательского интерфейса хоста одновременно.

Плюсы
Платформы
  • Linux, macOS, Windows
  • Android, iOS
  • Докер, MCU
Лицензия

LittlevGL

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

Плюсы
  • красивый
  • заполняет встроенную нишу
Минусы
  • необходимо использовать симуляторы, так как он встроен только
Платформы
Лицензия

дл

Библиотека предоставляет переносимый и простой API с графическим интерфейсом. Поверх основного GUI API реализовано множество виджетов. В отличие от многих других инструментов GUI, весь инструментарий dlib GUI является потокобезопасным.

Плюсы
  • может быть интересно, если вы работаете в ML
Минусы
  • тяжелый фреймворк, который также предоставляет виджеты графического интерфейса
Платформы
Лицензия

GWork

GWork — это встраиваемая библиотека графического интерфейса с изменяемым оформлением и обширным набором элементов управления. Отрисовка элементов управления является абстрактной и может быть реализована любым приложением, желающим использовать библиотеку. Gwork (произносится как «gw-orc») — это ответвление библиотеки графического интерфейса пользователя GWEN.Он был разветвлен, чтобы исправить проблемы с GWEN и добавить новые функции.

Плюсы
  • серверные модули множественного рендеринга
Минусы
Платформы
Лицензия

ivtools

Объекты InterViews Glyph предоставляют обычные виджеты пользовательского интерфейса, такие как кнопки, полосы прокрутки, раскрывающиеся меню, редакторы строк и т. Д. (Они также предоставляют ограниченные графические возможности; поскольку у них нет общей структуры редактирования, графика глифов в основном полезна для статических изображений , д.грамм. изображение внутри кнопки.) Мы используем глифы для реализации макета, внешнего вида и элементов управления / отображения для прикладных программ.

Плюсы
  • он доступен на github и все еще обновляется
Минусы
Платформы
  • Linux, macOS, Windows
  • SunOS / Solaris, IRIX, BSD
Лицензия

GLUI

GLUI — это библиотека пользовательского интерфейса C ++ на основе GLUT, которая предоставляет такие элементы управления, как кнопки, флажки, переключатели и счетчики для приложений OpenGL.Он не зависит от оконной системы и использует GLUT или FreeGLUT.

Плюсы
  • может быть интересно, если вы ориентируетесь на хипстерскую ретро-пользовательскую базу
Минусы
Платформы
Лицензия

морда

morda — это кроссплатформенная среда с ненавязчивым графическим интерфейсом, предназначенная для игр и мультимедийных приложений. Его дизайн был вдохновлен системой графического интерфейса пользователя Android, и многие концепции заимствованы оттуда. Он разработан для использования современных API-интерфейсов 3D-графики, таких как OpenGL и т. Д.

Плюсы
  • аппаратный рендеринг
  • доступно на nuget
Минусы
  • не использует cmake (они жестко запрограммировали все решения IDE платформы)
Платформы
Лицензия

TGUI

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

Плюсы
Минусы
  • требуется SFML
  • не очень красиво
Платформы
  • Linux, macOS, Windows
  • Android
Лицензия

Телекс

Telex — это среда пользовательского интерфейса C ++. Это структура пользовательского интерфейса без виджетов — вместо этого пользовательский интерфейс составляется с использованием общих веб-инструментов и фреймворков. Поэтому Телекс небольшой, его легко освоить и быстро освоить.

Плюсы
Минусы
Платформы
Лицензия

WTL

Библиотека шаблонов Windows (WTL) — это библиотека C ++ для разработки приложений Windows и компонентов пользовательского интерфейса.Он расширяет ATL (активную библиотеку шаблонов) и предоставляет набор классов для элементов управления, диалогов, окон фреймов, объектов GDI и т. Д.

Плюсы
  • очень легкая библиотека только для заголовков
  • Пакет NuGet
Минусы
  • Только Windows
  • Sourceforge !?
  • ограничительные лицензии
Платформы
Лицензия
  • Common Public License 1.0 (лицензия типа GPL)
  • Общественная лицензия Microsoft (лицензия типа GPL)

Сверхлегкий

Ultralight — это более легкий и быстрый вариант интеграции пользовательского интерфейса HTML в ваше приложение C ++.

Плюсы
Минусы
  • JavaScript
  • закрытый код
  • автор авесомиума (история отказа от проектов)
  • очень новый / не тестировался в боях
Платформы
Лицензия
  • коммерческий
  • бесплатно до 100 тысяч долларов или некоммерческий

Встроенный фреймворк Chromium

Chromium Embedded Framework (CEF) — это простая платформа для встраивания браузеров на основе Chromium в другие приложения.

Минусы
  • огромный
  • вы действительно хотите встроить хром в свой пользовательский интерфейс?
Платформы
Лицензия

Медь Спайс

CopperSpice — это набор библиотек C ++, используемых для разработки кроссплатформенных программных приложений. Это проект с открытым исходным кодом, выпущенный под лицензией LGPL V2.1. CopperSpice был получен из фреймворка Qt. Нашей мотивацией для разработки CopperSpice было изменение дизайна ядра и использование современных функциональных возможностей C ++.

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

Плюсы
Минусы
Платформы
Лицензия

FlatUI

FlatUI — это библиотека графического интерфейса C ++ для немедленного режима, цель которой — простой, эффективный и легкий в использовании способ добавления меню, HUD и любого другого пользовательского интерфейса в вашу игру или графическое приложение.Он также предлагает рендеринг шрифтов с учетом Unicode и i18n.

Минусы
Платформы
  • Linux, macOS, Windows
  • Android
Лицензия

SFGUI

Простой и быстрый графический интерфейс пользователя.

Минусы
Платформы
  • не смог найти список, но я считаю: Linux, macOS, Windows
Лицензия

Lgi

LGI — это инфраструктура графического интерфейса пользователя с открытым исходным кодом (на BitBucket) для абстрагирования всех зависимостей операционной системы, которые вы можете создать для переносимого кода.Он обрабатывает все функции графического интерфейса, потоки и семафоры, сетевое соединение и множество других битов и элементов, помогающих создавать небольшие, быстрые и надежные приложения.

Минусы
Платформы
Лицензия

Вердигрис

Verdigris — это библиотека только для заголовков, которую можно использовать с Qt. Он использует макросы для создания QMetaObject, который двоично совместим с собственным QMetaObject Qt, не требуя moc. Другими словами, вы можете использовать макросы Verdigris в своем приложении Qt или QML вместо некоторых макросов Qt, и тогда вам не нужно запускать moc.

Плюсы
Минусы
Платформы
  • нет в списке, но, вероятно, то же самое, что и Qt 4
Лицензия

ТК

Tk — это набор инструментов с графическим пользовательским интерфейсом, который выводит разработку настольных приложений на более высокий уровень, чем традиционные подходы. Tk — это стандартный графический интерфейс не только для Tcl, но и для многих других динамических языков, который может создавать богатые, собственные приложения, которые без изменений работают в Windows, Mac OS X, Linux и других.

Плюсы
Минусы
Платформы
Лицензия

Мертвые проекты

Я перечисляю их просто для того, чтобы список был полным и для развлечения. Я бы не рекомендовал использовать мертвые проекты в продакшене.

Турбо Барсук

Небольшая библиотека пользовательского интерфейса для игр и приложений с аппаратным ускорением.

Не зависит от stl, RTTI или исключений. Компиляция без этих функций очень мало занимает занимаемое место. Служебные классы (например, строка, списки, хеш-таблица и т. Д.) достаточно минимальны для основных нужд самого Turbo Badger.

Плюсы
  • на самом деле выглядит довольно прилично
Минусы

AntTweakBar

AntTweakBar — это небольшая и простая в использовании библиотека C / C ++, которая позволяет программистам быстро добавлять легкий и интуитивно понятный графический пользовательский интерфейс в графические приложения на основе OpenGL (совместимость и основные профили), DirectX 9, DirectX 10 или DirectX 11 для интерактивного взаимодействия. настроить параметры на экране.

Минусы

MyGUI

MyGUI — это библиотека для создания графических пользовательских интерфейсов (GUI) для игр и 3D-приложений.Основные цели mygui: скорость, гибкость и простота использования.

Пользовательский интерфейс прост в использовании и использует делегаты (сигналы и слоты) для удобной обработки событий.

Плюсы
Минусы

iupa2

IUPA2 означает «InterfacceUtentePerArtistiASCII» или «Пользовательские интерфейсы для художников ASCII».

Следующий снимок экрана не требует пояснений.

Плюсы
  • лол
  • визионер
  • волшебный
  • единороги
Минусы
  • «Этот проект родился из веселого сеанса кодирования после того, как вы выпили пива с другом, используйте его на свой страх и риск.”

Графический интерфейс игры

Попробовав несколько графических интерфейсов, более или менее подходящих для игр (LibRocket, Qt, NVWidgets, CEgui и т. Д.), Я обнаружил, что ни один из них не был действительно легким, простым в использовании и в то же время полностью настраиваемым. По этой причине я начал писать свой собственный графический интерфейс / C ++. Проект был завершен примерно за месяц.

Минусы
  • мертвый
  • «Проект был завершен примерно за месяц».

гламур

Набор инструментов GLAM — это набор инструментов межплатформенного пользовательского интерфейса на основе OpenGL для создания 2D или 3D пользовательских интерфейсов.Его основная цель — предоставить базовую структуру для пользовательского интерфейса, оставляя внешний вид, функции и поведение приложения на усмотрение разработчика. GLAM — это форма пользовательского интерфейса, следующая за функцией. Другими словами, внешний вид пользовательского интерфейса должен соответствовать цели, которую он пытается достичь.

Минусы

ЛибУФО

LibUFO — это основная библиотека C ++ для форм и графических пользовательских интерфейсов (GUI). В основном он используется как инструментарий OpenGL GUI.

Включено большинство стандартных компонентов (кнопки, метки, меню, поля со списком, виджеты вкладок, внутренние рамки и т. Д.). Визуальный вывод настраивается с помощью CSS (каскадных таблиц стилей) и классов стилей. Формы могут быть созданы с помощью XUL (язык пользовательского интерфейса XML, используемый Firefox).

Минусы

Каркас визуальных компонентов

Создание Visual Component Framework было основано на простоте использования таких сред, как Interface Builder NeXTStep, Java IDE, например JBuilder, Visual J ++, а также Delphi и C ++ Builder от Borland.Мне нужна была общая структура классов C ++, которую я мог бы использовать для быстрого и визуального создания приложений (при разработке пользовательского интерфейса), а также чтобы ядро ​​структуры было максимально кроссплатформенным.

Минусы

Гиги

GiGi (также известная как GG) — это библиотека графического интерфейса для OpenGL. Он не зависит от платформы (он работает как минимум в Linux и Windows и, возможно, больше), не зависит от компилятора (он компилируется под GCC 3.4 или выше и MSVC ++ 8.0 SP1 или выше и, возможно, больше) и не зависит от драйверов.Предоставляются справочные драйверы для SDL и Ogre, и если вы решите это сделать, написать его для себя несложно.

Минусы
  • Источники Кузни
  • подрывная
  • мертвых

м Гуи

MGui (MORELLO Graphic User Interface) — это кроссплатформенный графический пользовательский интерфейс, написанный на ANSI C, также предоставляющий C ++ API через библиотеку кадров. Он состоит из библиотеки, включающей все типичные объекты графического интерфейса пользователя, такие как меню, кнопки, редактируемые поля, списки и т. Д., И инструмент генерации кода (MGui Designer), который позволяет пользователю создавать и поддерживать макеты окон приложений с помощью мыши.

Плюсы
Минусы
  • Не знаю, что сказать…

ЖАБА

Экспериментальная библиотека C ++ для создания графических пользовательских интерфейсов (GUI) в оконной системе X11.

Разработан с 1995 года и предоставляет некоторые интересные функции, но не может конкурировать с людьми, стоящими за Gtk или Qt.

Плюсы
Минусы
  • «Не удалось конкурировать с людьми, стоящими за Gtk или Qt».
  • так мертвый

Амулет

Amulet — это среда разработки пользовательского интерфейса для C ++, переносимая через X11 на все типы Unix (Sun, Dec, HP, SGI, Linux, NetBSD и т. Д.)), Microsoft Windows 95 и NT и Macintosh. Amulet помогает создавать графические интерактивные пользовательские интерфейсы для вашего программного обеспечения.

Плюсы
  • черт возьми, этот сайт потрясающий
  • ужасно красиво
  • мгновенная паровая волна
Минусы

aedGUI

aedGUI — это кроссплатформенная, простая в использовании, ненавязчивая библиотека графического интерфейса C ++, работающая поверх SDL, предоставляющая тематические виджеты без изучения еще одного API.

Плюсы
Минусы

GLOW

GLOW Toolkit — это кроссплатформенная объектно-ориентированная среда для создания интерактивных приложений с использованием OpenGL или подобных API, таких как Mesa.По сути, это оболочка C ++ для GLUT, предоставляющая полностью объектно-ориентированный API для создания окон, меню и других элементов графического интерфейса, а также для обработки событий.

GLOW предназначен для разработки с однократной записью и компиляцией в любом месте, и его исходный код должен быть совместим с любой платформой, поддерживающей OpenGL и GLUT.

Плюсы

Мотив

Motif — это стандартный графический пользовательский интерфейс (согласно спецификации IEEE 1295), используемый более чем на 200 аппаратных и программных платформах.Он предоставляет разработчикам приложений, конечным пользователям и поставщикам систем наиболее широко используемую в отрасли среду для стандартизации представления приложений на широком спектре платформ. Motif — это ведущий инструментарий пользовательского интерфейса для системы UNIX.

Минусы

OpenGUI

OpenGUI — это высокоуровневая многоплатформенная, поточно-ориентированная библиотека окон и графики C / C ++, построенная на быстром низкоуровневом графическом ядре. Он предоставляет примитивы 2D-рисования и управляемый событиями оконный API для упрощения разработки приложений.Преимущество этой библиотеки — скорость, мощность и хорошо продуманный API с узкой кривой обучения.

Плюсы
  • очаровательный устаревший UI? может быть?
  • на самом деле выглядит неплохо для своего времени
Минусы
  • Ссылки для скачивания больше не работают

PicoGUI

PicoGUI — это проект с открытым исходным кодом для создания новой архитектуры графического интерфейса пользователя, предназначенной для использования в различных системах, от встроенных до настольных компьютеров.

PicoGUI не совместим с X или X.Это совершенно новый графический интерфейс. Целью разработки является не совместимость с другими графическими интерфейсами, а изучение уникальной архитектуры, которая особенно полезна для карманных компьютеров и других встраиваемых систем.

Плюсы
  • все еще может быть актуальным для встроенных
  • с действительно низкими характеристиками
Минусы

SmartWin ++

SmartWin ++ — это 100% бесплатная библиотека C ++ GUI и SOAP для разработки приложений Windows как на настольных компьютерах, так и на карманных компьютерах, системах на базе Windows Mobile или Windows CE, это бесплатно как в «бесплатном пиве», так и в «свободе слова», вы можете свободно используйте SmartWin ++ для коммерческих приложений и для приложений с открытым исходным кодом благодаря лицензии BSD!

Минусы
  • только окна, внесены в список, так как он мертв
  • мертвых

wGui

wGui — это простая, независимая от платформы библиотека диспетчера диалогов, использующая SDL и FreeType2.Написанный на C ++ (с широким использованием стандартной библиотеки и STL), намерение состоит в том, чтобы исключить из него все устаревшие парадигмы C (например, #defines).

Плюсы
Минусы

WideStudio

WideStudio — это интегрированная среда разработки с открытым исходным кодом для настольных приложений, созданная исключительно в Японии. Это позволяет вам разрабатывать приложения с графическим интерфейсом, которые могут работать в Windows95 / 98 / Me / NT / 2000 / Xp / Vista, WindowsCE, Linux, FreeBSD, SOLARIS, MacOSX (w / X11), BTRON, T-Engine, mu-CLinux ( wo / X11) на различных языках программирования, таких как C / C ++, Java, Perl, Ruby, Python, Objective Caml

Минусы
  • не английский
  • тяжелый каркас

Xview

Объектно-ориентированный инструментарий бедняков для создания приложений OPEN LOOK для X.Инструментарий XView предоставляет обширные комбинации пар атрибут-значение, удобные процедуры и иерархии классов объектов…

Плюсы
  • выиграли «лучший результат в сети апреля 1999 года»!
Минусы
  • должен вырвать мне глаза после просмотра сайта

Yzone

Проект GNU Yzone — это совместная разработка программного обеспечения, направленная на создание кроссплатформенной C-библиотеки для модульного программирования графического интерфейса пользователя.

Плюсы
  • очень красочный
  • Сайт
  • — это что посмотреть
Минусы

Vaca

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

Плюсы
Минусы

TinyWidgets

TinyWidgets — это набор виджетов на основе «C», предназначенный для работы с Nano-X API. Nano-X является частью Микроокон Грега Хэрра. TinyWidgets распространяется бесплатно под Стандартной общественной лицензией ограниченного применения GNU (LGPL).

Плюсы
Минусы

OpenZinc

Графический пользовательский интерфейс C ++ для MS_DOS, OS / 2, 16-битной Windows, 32-битной Windows, классического Macintosh, Linux и любых мотивов, поддерживающих unix.Включен дизайнер пользовательского интерфейса.

Плюсы
Минусы

акслиб

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

Плюсы
Минусы

ZooLib

ZooLib позволяет создавать собственные приложения для различных платформ и процессоров из единой кодовой базы без необходимости в исходном коде для конкретной платформы.

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

Минусы

libnui

Система графического интерфейса пользователя

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

Минусы

libRocket

libRocket — это пакет пользовательского интерфейса C ++, основанный на стандартах HTML и CSS. Он разработан как комплексное решение для любых требований интерфейса проекта.

Минусы

nvidia-виджеты

NVIDIA Widgets — это набор инструментов графического пользовательского интерфейса непосредственного режима, используемый в примерах NVIDIA SDK.

Минусы
  • мертвый
  • вероятно не готов к производству

Беспорядок

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

Минусы

GWEN

Abandoned: GWEN — GUI без экстравагантной ерунды.

Плюсы
  • Автор обновил описание, чтобы отметить проект как заброшенный
Минусы

QuickGUI

QuickGUI разработан, чтобы быть простой в использовании, но эффективной и мощной библиотекой графического интерфейса, которая работает с Ogre3d.QuickGUI активно развивается, и новые версии выходят каждые несколько месяцев. QuickGUI основан на инъекции ввода и работает с любой системой ввода. Код чистый и хорошо документированный, что упрощает его использование и расширение. Особое внимание уделяется скиннингу, что позволяет пользователям легко настраивать внешний вид своего графического интерфейса.

Минусы
  • упоминает Ogre3D
  • размещено на Ogre3D
  • используется с Ogre3D
  • я упоминал Ogre3D?

шепот

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

Минусы

В

V — это простая в программировании кроссплатформенная среда графического пользовательского интерфейса C ++. V был разработан, чтобы упростить написание приложений с графическим пользовательским интерфейсом C ++, независимо от того, являются ли они коммерческими, условно-бесплатными или бесплатными. В дополнение к OS / 2 он поддерживает MS Windows 16 и 32 бит и Unix-подобную операционную систему через X11, обратите внимание, что версия OS / 2 доступна в версиях для родной OS / 2 и XFree86.

Минусы

Андрей

Andrew предлагает расширяемую архитектуру составных документов, которая может создавать и комбинировать практически все, от текста до изображений, графиков, таблиц и рисунков, в один документ на экране вашего компьютера. Система была удачно представлена ​​в серии статей, опубликованных в Linux Journal в 1994 году.

Плюсы

Что такое графический интерфейс пользователя? Определение и часто задаваемые вопросы

Определение графического пользовательского интерфейса

Графический пользовательский интерфейс (GUI) — это тип пользовательского интерфейса, через который пользователи взаимодействуют с электронными устройствами посредством визуальных индикаторов.

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

Что такое графический интерфейс пользователя?

Графический пользовательский интерфейс, разработанный в конце 1970-х исследовательской лабораторией Xerox Palo Alto и коммерчески развернутый в операционных системах Apple Macintosh и Microsoft Windows, был разработан как ответ на проблему неэффективного использования ранних текстовых команд. линейные интерфейсы для обычного пользователя.

Графические пользовательские интерфейсы станут стандартом ориентированного на пользователя дизайна в программировании программных приложений, предоставляя пользователям возможность интуитивно управлять компьютерами и другими электронными устройствами посредством прямого управления графическими значками, такими как кнопки, полосы прокрутки, окна, вкладки, меню , курсоры и указательное устройство мыши.Многие современные графические пользовательские интерфейсы имеют сенсорный экран и возможности взаимодействия с голосовыми командами.

Как работает графический интерфейс пользователя?

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

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

Тестирование графического пользовательского интерфейса относится к систематическому процессу создания тестовых примеров для оценки функциональности системы и ее элементов дизайна. Инструменты тестирования графического пользовательского интерфейса, которые выполняются вручную или автоматически и обычно реализуются сторонними операторами, доступны по множеству лицензий и поддерживаются множеством платформ.Популярные примеры: Tricentis Tosca, Squish GUI Tester, Unified Functional Testing (UFT), Maveryx, Appium и eggPlant Functional.

Примеры графического интерфейса пользователя

Sketchpad, который считается первой программой автоматизированного графического проектирования, был разработан в 1962 году Иваном Сазерлендом, когда он работал в Массачусетском технологическом институте, и состоял из светового пера, который позволял пользователям создавать объекты и манипулировать ими. инженерные чертежи в реальном времени с согласованной графикой.

Современные операционные системы и графические пользовательские интерфейсы включены почти во все интерактивные приложения, такие как банкоматы, кассы самообслуживания, самостоятельная выписка билетов и регистрация на рейс, видеоигры, смартфоны и настольные компьютеры.Некоторые популярные современные примеры графического пользовательского интерфейса включают Microsoft Windows, macOS, Ubuntu Unity и GNOME Shell для настольных сред, а также Android, iOS от Apple, BlackBerry OS, Windows 10 Mobile, Palm OS-WebOS и Firefox OS для смартфонов.

Преимущества графических пользовательских интерфейсов

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

Лучший язык программирования для графических пользовательских интерфейсов

Несмотря на то, что существует несколько различных языков визуального программирования со своими уникальными преимуществами для разработки дизайна графического пользовательского интерфейса, C # или Java могут считаться предпочтительными вариантами из-за их способности запускать графические интерфейсы одновременно в браузере и как настольное приложение.Другие варианты включают Python, HTML5 / Javascript и C / C ++.

Разница между символьным пользовательским интерфейсом и графическим пользовательским интерфейсом

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

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

Разница между веб-интерфейсом пользователя и графическим пользовательским интерфейсом

Веб-интерфейс пользователя или графический веб-интерфейс пользователя относится к взаимодействию между пользователем и программным обеспечением, работающим на веб-сервере, где пользовательским интерфейсом является веб-браузер и веб-страница, которую он загрузил и отобразил.Такие технологии, как Flash, Java, JavaScript и Silverlight, обеспечивают такие взаимодействия, как перетаскивание, воспроизведение звука, рисование на экране и доступ к клавиатуре и мыши.

Графические веб-интерфейсы пользователя не зависят от платформы, не требуют установки или отдельной разработки программного обеспечения, легко обновляются и отслеживаются из-за того, что не зависят от пользователя при развертывании обновлений, обеспечивают яркий интерфейс пользователя и не требуют больших затрат. возможность подключения только по интерфейсу Ethernet или WiFi.

Предлагает ли OmniSci решения для графического интерфейса пользователя?

Преимущества визуализации в вычислениях очевидны в интуитивной природе графических пользовательских интерфейсов. Визуализация и интерактивность также являются полезными элементами в аналитике данных. OmniSci Immerse — это клиент интерактивной визуализации данных на основе браузера, который без проблем работает с серверными технологиями OmniSci, OmniSciDB и Render, предоставляя интерактивную визуальную платформу, которая сокращает время на получение аналитических данных и значительно расширяет возможности аналитика для поиска ранее скрытых идей. .

Другие пакеты графического интерфейса пользователя — документация Python 3.9.5

Основными кроссплатформенными (Windows, Mac OS X, Unix-подобными) инструментами графического интерфейса являются: доступно для Python:

См. Также

PyGObject

PyGObject обеспечивает привязки интроспекции для библиотек C с использованием GObject. Один из эти библиотеки представляют собой набор виджетов GTK + 3. В GTK + гораздо больше виджетов, чем в Tkinter. Онлайн Учебное пособие по Python GTK + 3 доступен.

PyGTK

PyGTK предоставляет привязки для более старой версии библиотеки GTK + 2. Он предоставляет объектно-ориентированный интерфейс, который немного выше, чем у C. Также есть привязки к ГНОМ. Доступен онлайн-учебник.

PyQt

PyQt — это привязка к набору инструментов Qt, обернутая sip и . Qt — это обширная среда разработки приложений с графическим пользовательским интерфейсом C ++, которая доступен для Unix, Windows и Mac OS X. sip — это инструмент для создания привязок для библиотек C ++ в виде классов Python и специально разработан для Python.

PySide2

Также известный как проект Qt для Python, PySide2 представляет собой более новую привязку к Набор инструментов Qt. Он предоставляется компанией Qt и направлен на предоставление полный перенос PySide на Qt 5. По сравнению с PyQt, его схема лицензирования более дружелюбен к приложениям без открытого исходного кода.

wxPython

wxPython — это кроссплатформенный набор инструментов с графическим интерфейсом для Python, созданный на основе популярные wxWidgets (ранее wxWindows) Инструментарий C ++. Он обеспечивает естественный вид для приложений на Системы Windows, Mac OS X и Unix с использованием собственных виджеты везде, где это возможно (GTK + в Unix-подобных системах).В дополнение к обширный набор виджетов, wxPython предоставляет классы для онлайн документация и контекстная справка, печать, просмотр HTML, рисование контекста устройства низкого уровня, перетаскивание, доступ к системному буферу обмена, формат ресурсов на основе XML и многое другое, включая постоянно растущую библиотеку модулей, добавленных пользователем.

PyGTK, PyQt, PySide2 и wxPython, все они имеют современный внешний вид и многое другое. виджеты, чем Tkinter. Кроме того, существует множество других инструментов GUI для Python, как кроссплатформенный, так и платформенно-зависимый.См. Страницу программирования с графическим интерфейсом пользователя в Python Wiki для гораздо более полный список, а также ссылки на документы, где сравниваются различные наборы инструментов GUI.

24,7. Другие пакеты графического интерфейса пользователя — документация Python 2.7.9

Основными кроссплатформенными (Windows, Mac OS X, Unix-подобными) инструментами графического интерфейса являются: доступно для Python:

См. Также

PyGTK
— это набор привязок для набора виджетов GTK. Это предоставляет объектно-ориентированный интерфейс, который немного выше уровня, чем C один.Он поставляется с гораздо большим количеством виджетов, чем предоставляет Tkinter, и имеет хорошая справочная документация по Python. Также есть привязки к ГНОМ. Доступен онлайн-учебник.
PyQt
PyQt — это привязка к набору инструментов Qt, обернутая sip . Qt — это обширная среда разработки приложений с графическим пользовательским интерфейсом C ++, которая доступен для Unix, Windows и Mac OS X. sip — это инструмент для создания привязок для библиотек C ++ в виде классов Python и специально разработан для Python.Привязки PyQt3 имеют книга, Программирование графического интерфейса пользователя с помощью Python: QT Edition by Boudewijn Rempt. В привязках PyQt4 также есть книга Rapid GUI Programming с Python и Qt, Марк Саммерфилд.
wxPython
wxPython — это кроссплатформенный набор инструментов с графическим интерфейсом для Python, построенный на популярные wxWidgets (ранее wxWindows) Инструментарий C ++. Он обеспечивает естественный вид для приложений на Системы Windows, Mac OS X и Unix с использованием собственных виджеты везде, где это возможно (GTK + в Unix-подобных системах).В дополнение к обширный набор виджетов, wxPython предоставляет классы для онлайн документация и контекстная справка, печать, просмотр HTML, рисование контекста устройства низкого уровня, перетаскивание, доступ к системному буферу обмена, формат ресурсов на основе XML и многое другое, включая постоянно растущую библиотеку модулей, добавленных пользователем. У wxPython есть книга «wxPython in Action» Ноэля Раппина и Робин Данн.

PyGTK, PyQt и wxPython, все они имеют современный вид и многое другое. виджеты, чем Tkinter.Кроме того, существует множество других инструментов GUI для Python, как кроссплатформенный, так и платформенно-зависимый. См. Страницу программирования с графическим интерфейсом пользователя в Python Wiki для гораздо более полный список, а также ссылки на документы, где сравниваются различные наборы инструментов GUI.

Графический «Hello World»

В этом руководстве вы узнаете, как создать законченное графическое приложение с окном и типичными элементами, такими как текстовое поле и кнопка. После выполнения этого руководства ваше приложение должно выглядеть примерно так:

Предварительные требования

Если вы еще этого не сделали, ознакомьтесь с нашим предыдущим руководством по написанию программы командной строки «Hello World» для окна терминала.В этом руководстве показано, как включить библиотеки EFL в свои приложения.

Поскольку вы будете использовать код из предыдущего руководства, взгляните на приведенную ниже программу, чтобы освежить память:

  #define EFL_BETA_API_SUPPORT 1

#include 

EAPI_MAIN недействителен
efl_main (void * данные EINA_UNUSED, const Efl_Event * ev)
{
   Efl_Loop_Arguments * args = ev-> info;

   если (eina_array_count (args-> argv) == 0)
     {
        printf ("Привет, мир! \ n");
     }
   еще
     {
        printf ("Привет% s! \ n", (char *) eina_array_data_get (args-> argv, 0));
     }

   efl_exit (0);
}
EFL_MAIN ()  

Приступим.

Шаг 1. Отображение окна

Вместо того, чтобы печатать в командной строке, на этот раз ваше сообщение будет отображаться в окне. Первое, что нужно сделать, это удалить строки в основном цикле EFL: другими словами, избавиться от строк с 10 по 21:

.
  [...]
   Efl_Loop_Arguments * args = ev-> info;

   если (eina_array_count (args-> argv) == 0)
     {
        printf ("Привет, мир! \ n");
     }
   еще
     {
        printf ("Привет% s! \ n", (char *) eina_array_data_get (args-> argv, 0));
     }

   efl_exit (0);
[...]  

ПРИМЕЧАНИЕ: [...] в кодовом блоке указывает существующий код, который был исключен для краткости. Нет необходимости вводить [...] в вашу программу.

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

Создайте функцию для настройки вашего окна и назовите ее _gui_setup () . Вставьте вызов функции из основного цикла EFL. Также включите Efl_Ui.h вместо Efl_Core.h , чтобы включить весь необходимый код пользовательского интерфейса. Ваша программа должна выглядеть так:

  #define EFL_BETA_API_SUPPORT 1

#include 


статическая пустота
_gui_setup ()
{
  // Создаем графический интерфейс пользователя здесь
}

EAPI_MAIN недействителен
efl_main (void * данные EINA_UNUSED, const Efl_Event * ev EINA_UNUSED)
{
   _gui_setup ();
}
EFL_MAIN ()  

Ваша функция настроена в строках с 9 по 13.Поскольку он не предназначен для возврата чего-либо в основную функцию, вы можете объявить его как void . Вам также не нужно ничего передавать этой функции, так как она будет отображать только статический текст. Значит, параметров тоже нет. Вы вызываете _gui_setup () из строки 18 в основном цикле EFL.

Пока _gui_setup пусто. Создайте окно, добавив следующие строки в вашу функцию _gui_setup () :

  [...]
   Eo * win;

   выигрыш = efl_add (EFL_UI_WIN_CLASS, efl_main_loop_get (),
                 efl_ui_win_type_set (efl_added, EFL_UI_WIN_TYPE_BASIC),
                 efl_text_set (efl_added, «Привет, мир»),
                 efl_ui_win_autodel_set (efl_added, EINA_TRUE));
[...]  

Что касается EFL, окно — это просто еще один объект. Вы можете объявить его с помощью Eo * win; . Тип Eo — это базовая объектная система для EFL. Большинство графических элементов, таких как окна, текстовые поля, кнопки, ползунки и т. Д., Являются объектами Eo . Вы можете дать своему окну любое имя, но пока для простоты назовите его win .

Следующая часть кода определяет само окно. Метод efl_add () создает новый объект класса, указанного в первом параметре, и помещает его в уже существующий объект, указанный во втором параметре.В графическом приложении EFL виджеты вставляются внутрь других объектов. Например, вы можете поместить текстовый объект в текстовое поле внутри окна и так далее. В этом случае мы хотим создать окно ( EFL_UI_WIN _CLASS ), которое должно быть дочерним по отношению к главному циклу приложения, чтобы оно могло получать события приложения (см. Руководство по программированию основного цикла). Вы всегда можете получить основной цикл приложения, используя efl_main_loop_get () .

Остальные параметры efl_add () — это список методов, которые будут вызываться по порядку, обычно для настройки только что созданного объекта.Вы можете добавить в этот список столько методов конфигурации, сколько захотите, и можете использовать специальный символ efl_added для ссылки на созданный объект, если вам нужно.

Функция efl_ui_win_type_set () делает то, что написано на коробке. Есть несколько типов окон (базовые, диалоговые, всплывающие меню и т. Д.): Здесь нам нужен самый базовый тип. Функция efl_text_set () устанавливает для текста строки заголовка окна, в данном случае, значение «Hello World». Процедура efl_ui_win_autodel_set () сообщает программе, что окно должно автоматически исчезать, если оно закрыто.Вы можете найти точное значение этих вызовов в [Справочном руководстве по API] (ссылка на / devel / auto).

Ваша программа теперь будет выглядеть так:

  #define EFL_BETA_API_SUPPORT 1

#include 


статическая пустота
_gui_setup ()
{
   Eo * win;

   выигрыш = efl_add (EFL_UI_WIN_CLASS, efl_main_loop_get (),
                 efl_ui_win_type_set (efl_added, EFL_UI_WIN_TYPE_BASIC),
                 efl_text_set (efl_added, «Привет, мир»),
                 efl_ui_win_autodel_set (efl_added, EINA_TRUE));
}

EAPI_MAIN недействителен
efl_main (void * данные EINA_UNUSED, const Efl_Event * ev EINA_UNUSED)
{
   _gui_setup ();
}
EFL_MAIN ()  

Сохраните эту программу в файл с именем hello-world-gui.c .

Вы можете скомпилировать эту программу, следуя инструкциям в разделах Compile и Run Руководства по установке EFL. Компиляция создаст файл с именем «hello-world-gui», который вы можете выполнить, хотя на этом этапе вы не увидите много информации. Окно открывается, но оно пустое и минимального размера. Вы можете увидеть его в верхнем левом углу экрана в виде тонкой полоски. Вы можете попробовать перетащить его края с помощью мыши, чтобы увеличить, если хотите.

Вы также должны выйти из приложения вручную, нажав Ctrl + C в терминале, поскольку приложение не останавливается даже при закрытии окна.

Однако вы можете решить обе эти проблемы.

Шаг 2. Остановка приложения

Поскольку приложение может иметь несколько окон, закрытие одного из них не остановит приложение. Вот почему ваша программа выше не останавливается, даже если вы закроете единственное окно. Чтобы полностью выйти из приложения, вызовите функцию EFL efl_exit () . Для этого добавьте в свою программу новую функцию:

  [...]
статическая пустота
_gui_quit_cb (void * данные EINA_UNUSED, const Efl_Event * событие EINA_UNUSED)
{
   efl_exit (0);
}
[...]  

Теперь добавьте строку:

  [...]
   efl_event_callback_add (выигрыш, EFL_UI_WIN_EVENT_DELETE_REQUEST, _gui_quit_cb, NULL);
[...]  

в функцию _gui_setup () .

Это гарантирует, что при закрытии окна win ( EFL_UI_WIN_EVENT_DELETE_REQUEST ) приложение также закрывается путем вызова _gui_quit_cb () .

Шаг 3. Добавление поля

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

Объявите новый объект Eo в _gui_setup () , изменив Eo * win; строка до Eo * win, * box; .

Затем создайте объект коробки и добавьте его в окно:

  [...]
   box = efl_add (EFL_UI_BOX_CLASS, победа,
         efl_content_set (победа, efl_added),
         efl_gfx_hint_size_min_set (efl_added, EINA_SIZE2D (360, 240)));
[...]  

Как и EFL_UI_WIN_CLASS , который вы видели в блоке создания win , EFL_UI_BOX_CLASS — это макрос, который устанавливает, что этот объект будет блочным объектом.Следующий параметр сообщает вашему приложению, в какой объект должен входить блок: в данном случае внутри окна win , которое вы создали ранее. Функция efl_content_set () активирует текстовое поле в окне. Пока вы не вызовете эту функцию, окно не будет видно. Функция efl_gfx_hint_size_min_set () устанавливает минимальный размер окна — его можно увеличить, перетаскивая углы окна, но он не может быть меньше.

Теперь ваша программа должна выглядеть так:

  #define EFL_BETA_API_SUPPORT 1

#include 

статическая пустота
_gui_quit_cb (void * данные EINA_UNUSED, const Efl_Event * событие EINA_UNUSED)
{
   efl_exit (0);
}

статическая пустота
_gui_setup ()
{
   Эо * победа, * коробка;

   выигрыш = efl_add (EFL_UI_WIN_CLASS, efl_main_loop_get (),
                 efl_ui_win_type_set (efl_added, EFL_UI_WIN_TYPE_BASIC),
                 efl_text_set (efl_added, «Привет, мир»),
                 efl_ui_win_autodel_set (efl_added, EINA_TRUE));

   efl_event_callback_add (выигрыш, EFL_UI_WIN_EVENT_DELETE_REQUEST, _gui_quit_cb, NULL);

   box = efl_add (EFL_UI_BOX_CLASS, победа,
         efl_content_set (победа, efl_added),
         efl_gfx_hint_size_min_set (efl_added, EINA_SIZE2D (360, 240)));
}

EAPI_MAIN недействителен
efl_main (void * данные EINA_UNUSED, const Efl_Event * ev EINA_UNUSED)
{
   _gui_setup ();
}
EFL_MAIN ()  

Если вы скомпилируете и запустите эту программу, вы должны увидеть что-то вроде того, что показано ниже:

Следующим шагом является добавление виджетов текстового поля и кнопок.

Вы можете добавить виджет текстового поля с помощью EFL_UI_TEXTBOX_CLASS и вставить в поле объект . Вставьте следующий код в свою функцию _gui_setup () :

  [...]
  efl_add (EFL_UI_TEXTBOX_CLASS, поле,
           efl_text_markup_set (efl_added, «Привет, мир. Это приложение  Efl.Ui !»),
           efl_text_interactive_selection_allowed_set (efl_added, EINA_FALSE),
           efl_pack (коробка, efl_added));
[...]  

efl_text_markup_set () позволяет вам определять, какой текст отображать в текстовом поле. Вы можете применить некоторое форматирование, если хотите использовать базовую разметку, подобную HTML. efl_text_interactive_selection_allowed_set (efl_added, EINA_FALSE) сообщает приложению, что текст не может быть изменен пользователем. efl_pack () помещается в текстовое поле внутри контейнера, занимая все доступное пространство. Это не обязательно означает все пространство: см. Ниже.

Для добавления кнопки используйте следующий код:

  [...]
   efl_add (EFL_UI_BUTTON_CLASS, коробка,
           efl_text_set (efl_added, «Выйти»),
           efl_pack (коробка, efl_added),
           efl_event_callback_add (efl_added, EFL_INPUT_EVENT_CLICKED,
                                  _gui_quit_cb, efl_added));
[...]  

efl_text_set () добавляет метку Quit к кнопке, а efl_event_callback_add () определяет, какое событие запускает кнопку, в данном случае нажатие ( EFL_INPUT_EVENT_CLICKED ).Вы также определите, что делать, если событие действительно сработало. Здесь программа завершает работу, вызывая функцию обратного вызова _gui_quit_cb () , которую вы определили ранее.

Обратите внимание, как вы снова используете efl_pack () , чтобы определить, сколько места будет занимать кнопка. Без дополнительной информации EFL делит доступное пространство поровну между всеми виджетами. Это означает, что если вы скомпилируете и запустите программу, вы должны увидеть что-то вроде этого:

Как видите, текстовое поле занимает одну половину места, а кнопка — другую.

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

Чтобы изменить относительное пространство, занимаемое каждым виджетом, вы используете подсказку веса : другими словами, вы можете назначить, сколько пропорционального пространства должно занимать каждый виджет относительно друг друга, а также общего пространства, доступного в контейнере.Например, вы можете добавить функцию efl_gfx_hint_weight_set () в текстовое поле и кнопку, например:

  [...]
   efl_add (EFL_UI_TEXTBOX_CLASS, поле,
           efl_text_markup_set (efl_added, «Привет, мир. 
Это приложение Efl.Ui !»), efl_text_interactive_selection_allowed_set (efl_added, EINA_FALSE), efl_gfx_hint_weight_set (efl_added, 1.0, 1.0), efl_pack (коробка, efl_added)); efl_add (EFL_UI_BUTTON_CLASS, коробка, efl_text_set (efl_added, «Выйти»), efl_gfx_hint_weight_set (efl_added, 1.0, 1.0), efl_pack (коробка, efl_added), efl_event_callback_add (efl_added, EFL_INPUT_EVENT_CLICKED, _gui_quit_cb, efl_added)); [...]

Параметры 1.0, 1.0 в обеих функциях сообщают Enlightenment о назначении максимального доступного пространства по горизонтальной и вертикальной оси. Это означает, что каждый из них занимает по 50% пространства, а окно выглядит так, как вы видите выше.

Однако, если вы измените efl_gfx_hint_weight_set () для текстового поля на:

  [...]
           efl_gfx_hint_weight_set (efl_added, 1.0, 0.9),
[...]  

, затем измените функцию кнопки на:

  [...]
           efl_gfx_hint_weight_set (efl_added, 1.0, 0.1),
[...]  

Enlightenment назначает примерно 90% вертикального пространства текстовому полю и примерно 10% пространства кнопке. Это неточно, поскольку высота кнопки минимальна. Минимальная высота нужна, чтобы быть уверенным, что какой бы маленькой ни была кнопка, ее метка всегда будет видна.

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

Чтобы изменить выравнивание текста в текстовом поле, используйте с ним функцию efl_gfx_hint_align_set () . Например:

  [...]
    efl_gfx_hint_align_set (efl_added, 0.0, 1.0),
[...]  

Это выравнивает текст по левой стороне поля, что является настройкой по умолчанию.

Изменение параметров на следующие выравнивает текст по правому краю, как вы можете видеть ниже:

  [...]
    efl_gfx_hint_align_set (efl_added, 1.0, 0.0),
[...]  

Если вы используете 0,5, 0,5 , текст будет центрирован. Взгляните на полную программу ниже, чтобы увидеть пример этого.

Полная программа «hello-world-gui.c»

  #define EFL_BETA_API_SUPPORT 1

#include 

статическая пустота
_gui_quit_cb (void * данные EINA_UNUSED, const Efl_Event * событие EINA_UNUSED)
{
   efl_exit (0);
}

статическая пустота
_gui_setup ()
{
   Эо * победа, * коробка;

   выигрыш = efl_add (EFL_UI_WIN_CLASS, efl_main_loop_get (),
                 efl_ui_win_type_set (efl_added, EFL_UI_WIN_TYPE_BASIC),
                 efl_text_set (efl_added, «Привет, мир»),
                 efl_ui_win_autodel_set (efl_added, EINA_TRUE));

   efl_event_callback_add (выигрыш, EFL_UI_WIN_EVENT_DELETE_REQUEST, _gui_quit_cb, NULL);

   box = efl_add (EFL_UI_BOX_CLASS, победа,
                efl_content_set (победа, efl_added),
                efl_gfx_hint_size_min_set (efl_added, EINA_SIZE2D (360, 240)));

   efl_add (EFL_UI_TEXTBOX_CLASS, поле,
           efl_text_markup_set (efl_added, "Привет, мир.Это приложение  Efl.Ui ! "),
           efl_text_interactive_selection_allowed_set (efl_added, EINA_FALSE),
           efl_gfx_hint_weight_set (efl_added, 1.0, 0.9),
           efl_gfx_hint_align_set (efl_added, 0.5, 0.5),
           efl_pack (коробка, efl_added));

   efl_add (EFL_UI_BUTTON_CLASS, коробка,
           efl_text_set (efl_added, «Выйти»),
           efl_gfx_hint_weight_set (efl_added, 1.0, 0.1),
           efl_pack (коробка, efl_added),
           efl_event_callback_add (efl_added, EFL_INPUT_EVENT_CLICKED,
                                  _gui_quit_cb, efl_added));
}

EAPI_MAIN недействителен
efl_main (void * данные EINA_UNUSED, const Efl_Event * ev EINA_UNUSED)
{
   _gui_setup ();
}
EFL_MAIN ()  

Компиляция и запуск

Следуйте инструкциям в разделе Compile and Run Руководства по установке EFL для вашей операционной системы, чтобы создать исполняемый файл с именем «hello-world-gui».Запустите это с:

  ./hello-world-gui  

Вы увидите что-то вроде того, что показано ниже.

Окно показывает текстовое окно с центрированным текстом и кнопкой, которая выходит из программы, когда пользователь щелкает ее.

Посетите раздел «Что стоит попробовать» ниже, чтобы узнать, что вы можете попробовать дальше, и познакомьтесь с программированием графических приложений с помощью EFL.

Если что-то пойдет не так, загляните в раздел «Устранение неполадок» в конце страницы.

Что стоит попробовать

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

Резюме

Из этого урока вы узнали:

  • Как создать графическое окно с помощью efl_add () и EFL_UI_WIN_CLASS .
  • Как добавить и разместить виджеты в окне с помощью efl_add () , efl_gfx_hint_align_set () и efl_gfx_hint_weight_set () .
  • Как выйти из приложения, которое чисто использует окна, с помощью efl_quit () .

Поиск и устранение неисправностей

Помимо опечаток, которые могут вызвать проблемы при компиляции или запуске, в этом приложении мало что может пойти не так. Если не удается скомпилировать, убедитесь, что вы установили все библиотеки EFL и файлы разработки и что они обновлены.Узнайте больше об установке файлов EFL здесь.

Ресурсы

Руководство по установке EFL
Инструкции по установке и использованию EFL в различных операционных системах.
Примеры кода учебного пособия
Исходный код программ, включенных в это и другие руководства.
.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *