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

До сих пор все мои C++ программы использовали интерфейс командной строки, и единственный другой язык, с которым я сталкивался, - это PHP, который не поддерживает GUI.

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

Ответ 1

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

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

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

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

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

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

Ответ 2

Существует множество бесплатных библиотек GUI , каждый из которых имеет свои сильные и слабые стороны:

Особенно Qt имеет хорошие учебные пособия и инструменты, которые помогут вам начать работу. Наслаждайтесь!

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

Ответ 3

Независимый от ОС алгоритм "Создание графических приложений на С++ в три этапа":

  • Установите Qt Creator

    введите описание изображения здесь

  • Создайте новый проект (приложение Qt Widgets)

    введите описание изображения здесь

  • Постройте его.

Поздравляем, у вас есть свой первый графический интерфейс на С++.

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

Ответ 4

Учитывая комментарий "скажем, Windows XP в качестве примера", тогда ваши варианты:

  • Взаимодействуйте напрямую с операционной системой через ее API, который для Microsoft Windows является неожиданным сюрпризом для вызова Windows API. Окончательной ссылкой для WinAPI является веб-сайт Microsoft MSDN. Популярным онлайновым учебным пособием для начинающих является Forger Win32 API Programming Tutorial. Классическая книга для этого - Чарльз Петцольд Программирование Windows, 5-е издание.

  • Используйте платформу (как с точки зрения ОС, так и компилятора), специфическую библиотеку, такую как MFC, которая превращает WinAPI в класс C++. Ссылка для этого снова MSDN. Классическая книга для этого - Jeff Prosise Programming Windows с помощью MFC, 2nd Edition. Если вы используете, скажем, CodeGear C++ Builder, то вариант здесь VCL.

  • Используйте кроссплатформенную библиотеку, такую как GTK+ (C++ wrapper: gtkmm), Qt, wxWidgets или FLTK, которые обертывают конкретный API ОС. Преимущества этого в том, что в целом ваша программа может быть скомпилирована для разных ОС без необходимости изменения исходных кодов. Как уже упоминалось, у каждого из них есть свои сильные и слабые стороны. Одним из соображений при выборе того, который использовать, является его лицензия. В приведенных примерах GTK+ & gtkmm является лицензией под LGPL, Qt находится под различными лицензиями, включая проприетарную, wxWidgets - под собственной лицензией wxWindows (с переименованием в wxWidgets License), а FLTK - под LGPL за исключением. Для справки, учебника и/или книг, обратитесь к каждому веб-сайту для деталей.

Ответ 5

Поскольку я уже был там, где вы сейчас, я думаю, что могу "ответить" вам.

Дело в том, что нет простого способа сделать графический интерфейс. Графический интерфейс сильно зависит от кода платформы и ОС, поэтому вы должны начать чтение документации целевой платформы/ОС по API управления окнами. Хорошо, что существует множество библиотек, которые устраняют эти ограничения и абстрактные различия в архитектуре в один многоплатформенный API. Те, что были предложены ранее, GTK и QT, являются некоторыми из этих библиотек.

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

Подводя итог, существуют также "свободные" среды для разработки графического интерфейса, такие как Visual Studio от Microsoft. Для тех, у кого опыт работы с Delphi, Visual Studio может быть более знакомым. Существуют также бесплатные альтернативы полной среде Visual Studio, поставляемой Microsoft: Visual Studio Express, чего более чем достаточно для начала разработки графического интерфейса.

Ответ 7

Qt является лучшим.

Ответ 8

Легко создать графический интерфейс .NET Windows на С++.

См. следующий учебник из MSDN. Вы можете загрузить все, что вам нужно (Visual С++ Express) для бесплатно.

Конечно, вы привязываетесь к .NET, но если вы просто играете или нуждаетесь только в приложении Windows, вы будете в порядке (у большинства людей все еще есть Windows... пока).

Ответ 9

Я использую FLTK, потому что QT не являются бесплатными. Я не выбираю wxWidgets, потому что мой первый тест с простой мировой программой hello создает исполняемый файл из 24Mb, fltk 0.8MB...