it-swarm.com.ru

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

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

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

231
waiwai933

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

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

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

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

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

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

136
Breton

Есть много бесплатные портативные библиотеки GUIкаждый со своими сильными и слабыми сторонами:

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

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

146
vog

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

  1. Установить Qt Creator

    enter image description here

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

    enter image description here

  3. Построить это.

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

Теперь вы готовы прочитать много документации , чтобы создать что-то более сложное, чем приложение с графическим интерфейсом "Hello world".

68
Kirill V. Lyadvinsky

Учитывая комментарий "скажем Windows XP в качестве примера", вы можете выбрать следующие варианты:

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

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

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

23
KTC

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

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

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

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

18
Spidey

Я нашел веб-сайт с "простым" руководством: http://www.winprog.org/tutorial/start.html

15
ZippyV

Qt самый лучший.

6
ufukgun

Легко создать .NET Windows GUI на C++.

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

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

3
Justicle

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

3
pernecker