Первые шаги в изучении GUI в С++ [закрыт]
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 3 года назад .
- OpenGL
- DirectX
- SDL
Ну и другие. Что еще слышал об Qt, что стоит с него начинать. Так вот, собственно вопрос:
С чего лучше начать?
Может у кого-то есть литература или видео-уроки.
Отслеживать
68k 218 218 золотых знаков 79 79 серебряных знаков 221 221 бронзовый знак
задан 16 окт 2013 в 12:04
3,649 5 5 золотых знаков 25 25 серебряных знаков 47 47 бронзовых знаков
Скорее всего, ответы на этот вопрос будут основаны на мнениях, а не на фактах и цитатах. Необходимо переформулировать его так, чтобы на него можно было дать объективный ответ.
29 авг 2020 в 7:22
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Так вам что именно нужно? Изучить кресты, или научиться делать всяческие. пардон, гуёвины (это от слова GUI, не подумайте плохого)?
Если второе, то C++ вряд ли можно назвать идеальным выбором для этого. Если первое, то лучше сконцентрироваться на возможностях самого языка, а конкретные задачи ставить себе уже по мере изучения. Что касается книг, то посмотрите ответы на этот вопрос
А вот что касается упомянутых вами библиотек, то они прямого отношения к ремеслу клепания окошек не имеют. Это библиотеки по работе с графикой. Если нет достаточных знаний языка и веских причин с ними связываться, то я бы на вашем месте не торопился в них углубляться, еще успеете
Отслеживать
ответ дан 16 окт 2013 в 12:18
DreamChild DreamChild
36.2k 3 3 золотых знака 45 45 серебряных знаков 85 85 бронзовых знаков
Если ты хочешь «графический интерфейс, кнопочки всякие ну и т.п.», то есть GUI, то советую на Qt или gtk посмотреть (оба кроссплатформенны).
А что касается перечисленных OpenGL, DirectX и SDL — так это ведь графические библиотеки, их совместно с gui используют (встраивается виджет с выводом графики, как, например, QGLWidget), так что это немного другое. Но всё равно лучше бы OpenGL (а SDL в связке с ним часто используют для некоторых действий).
В итоге получится что-то вроде Qt+OpenGL (хотя есть модули Qt3D и QtOpenGL, что тоже использует OpenGL).
Отслеживать
ответ дан 16 окт 2013 в 12:52
1,739 10 10 серебряных знаков 12 12 бронзовых знаков
OpenGL, DirectX и SDL это библиотеки для работы с 2Д/3Д графикой. Это не для GUI. Точнее графический интерфейс пользователя (GUI) там можно отрисовать, конечно, но это применение не по назначению данных технологий (=забивать гвозди микроскопом)
ГУИ это QT, GTK (как уже сказано выше — кросплатформенные библиотеки) или MFC например (WIN32) или прямое WINAPI. Последние только под винду и с учётом последних веяний этой платформы (смотри Windows 8) не шибко полезно вкладываться в их изучение так как скорее всего от них откажутся окончательно.
Отслеживать
ответ дан 16 окт 2013 в 13:07
Andrey Buran Andrey Buran
921 6 6 серебряных знаков 15 15 бронзовых знаков
Господа, я думаю, вы мне простите, что я выкопал эту тему, но пройти мимо я не мог.
Я занимаюсь разными GUI много лет и кое что об этом знаю.
В области GUI есть много крутых контор, которые делают свои решения, но я бы остановился на трех из них:
Telerik Controls, DevExpress и Nevron.
Специально не привожу ссылок, потому что в гугле ссылки по этим ключевым словам исчисляются миллионами.
Коротко о каждом:
Telerik Controls — без сомнения, современный лидер среди коммерческих компонентов. Во первых, они впереди планеты всей по веб-компонентам. Во вторых, я даже не могу придумать, какую область они не покрыли собой: WPF, ASP.NET Core, UWP, WinForms, SilverLight (да покоится с миром), Xamarin — для ЛЮБОЙ платформы в известной части вселенной у них есть продукт.
Список их пользователей включает Kodak, ООН, Microsoft, Heinz, Евросоюз, Accenture, Pfizer, Мировой Банк, Intel, Citigroup, NASA, Siemens, Nike, IMF, T-Mobile, Reuters, Вооруженные силы США, Vodafone, NBC, Universal Harvard University, Motorola
DevExpress — это паровоз, который мчится вперед на скорости больше 100 км в час. Еще 10 лет назад это был скромный набор компонентов для виндовс. Но с тех пор они каждый год выпускали новую версию, и сейчас это БОГАТЕЙШИЙ набор контролов, которые с минимумом кода позволяют решить практически любую задачу. Кроме того, они весьма удачно пару лет назад распользлись на MacOS, и теперь две платформы, которые вообще АССОЦИИРУЮТСЯ с GUI покрыты ими. Ну, и WEB — компоненты у них на высоте. Судя по скорости развития — они так хороши, что если бы не конкуренты — они бы захватили мир.
Nevron — когда то очень крутой набор компонентов, но сейчас они немного сдулись. По моему, они не расползаются на другие платформы, как двое вышеназванных, а остаются верны WinForms. Но хорошее впечатление о себ оставили, и сейчас они по монему в весовой категории «бедненько, но чистенько».
И еще два замечания:
1) вообще говоря, при работе с такими компонентами — язык вторичен. То есть, компоненты представляют из себя «черные ящики с ручками», а из какого языка и как за эти ручки дергать — вопрос другого порядка. Конечно, у всех них есть рекомендуемые сочетания с языками программирования, но про это лучше уже читать на сайтах производителей.
(тс-с, я вам этого не говорил, но сейчас макcимум совместимости при разработке в винде — с языком C#)
2) Есть огромное кол-во не коммерческих, а «свободных» компонентов. И у сторонников «свободных» компонентов есть свои лидеры и прочее.
(Но я смотрел — и если коротко, то это «жалкое подобие левой руки». Но это, конечно же, моё частное мнение.)
Универсальный GUI
Здравствуйте! Меня зовут Халитов Кирилл, я аспирант из МГУДТ (Московский государственный университет дизайна и технологии (МГУДТ) ). В моей диссертации возникла задача упростить процесс создания интерфейса для локального и веб-приложения и в итоге получился сабж.
Введение
В настоящее время любая современная мониторинговая система включает в себя прикладное программное обеспечение (ПО) для визуализации данных. Как правило, запуск этого ПО предполагает наличие рекомендуемой операционной системы (ОС), в большинстве своих случаев ОС компании Microsoft. Однако сейчас наблюдается тенденция использования кроссплатформенных средств для разработки ПО. В результате этого появляется возможность запуска готового программного продукта на разных ОС, включая и мобильные ОС.
Кроме того, в связи с бурным распространением интернета популярным направлением разработки ПО стала разработка веб-приложений или веб-сервисов. Веб-приложение является полезным дополнением к клиентской прикладной программе (приложению). Обычно веб-приложение даёт возможность удалённого использования мониторинговой системы. Это означает, что пользователь не привязан к месту расположения аппаратной части мониторинговой системы и может использовать её из любой точки мира, где есть рекомендуемое интернет-соединение. Важно заметить, что разработка веб-приложений в значительной степени отличается от разработки клиентских приложений и это в свою очередь создаёт некоторые проблемы. В частности, это проблема создания универсального графического интерфейса пользователя (GUI). Чтобы клиентское приложение и веб-приложение были реализованы в едином графическом стиле, необходимо приложить достаточно усилий как разработчику интерфейса клиентского приложения, так и разработчику интерфейса веб-приложения. В конечном счёте величина усилий одного или другого разработчика будет зависеть от того, интерфейс какого приложения будет задавать общий стиль.
Современные способы построения интерфейсов
Рассмотрим наиболее популярные в настоящий момент способы построения интерфейсов клиентских приложений на языке C++, как наиболее используемом для разработки ПО, для ОС Microsoft Windows (MS Windows) и ОС Linux. Главным средством разработки ПО для MS Windows является MS Visual Studio [1]. Эта интегрированная среда разработки (IDE) позволяет разрабатывать ПО на разных языках программирования, но основными языками, конечно, являются C++ и C#. Для разработки интерфейса приложения имеются два основных средства — Windows Forms (WinForms) и Windows Presentation Foundation (WPF). Большая часть существующих приложений для MS Windows разработана с использованием WinForms, однако с появлением более современных версий ОС (MS Windows 7, 8), система WPF становится более популярной. Кроме того, последние версии MS Visual Studio позволяют использовать язык разметки HTML5 для построения интерфейсов, близких по стилю к нативным веб-приложениям. Однако стоит заметить, что коммерческая лицензия MS Visual Studio является платной, как и лицензия MS Windows, что несомненно является недостатком для низкобюджетных проектах.
Если говорить о низкобюджетных проектах, то тут наиболее подходящим вариантом является ОС Linux. Помимо того, что большинство дистрибутивов этой ОС являются абсолютно бесплатными, в том числе и для коммерческого использования, также имеется ряд бесплатных средств для разработки качественного ПО для ОС Linux. Самым распространённым средством для разработки ПО на языке С++ является кроссплатформенный инструментарий Qt [2]. Важно подчеркнуть, что Qt позволяет разрабатывать приложения не только для ОС Linux, но и для MS Windows, Mac OS X, Android и других UNIX-подобных ОС. Разработчики Qt предлагают как бесплатную для коммерческого использования, так и платную лицензию с дополнительными возможностями. Но исходя из современной практики разработки ПО с помощью этого инструментария, бесплатной лицензии оказывается больше чем достаточно.
Если проводить аналогию с MS Visual Studio, то в Qt мы имеем IDE Qt Creator. Здесь альтернативой WinForms являются так называемые виджеты (Qt Widgets), а альтернатива для WPF — Qt Quick. Также в Qt Creator имеется возможность создания интерфейсов на основе HTML5. Но наиболее интересным модулем инструментария является встраиваемый веб-движок WebKit, который лежит в основе всех современных веб-браузеров. Подобный модуль имеется и в MS Visual Studio, но он имеет ряд ограничений, и тем более нас больше интересуют низкобюджетные средства, которые позволяют уменьшить издержки при создания программного продукта. Веб-движок — это ядро браузера, он отвечает за правильное отображения веб-страниц. Модуль Qt WebKit позволяет создавать интерфейс клиентского приложения с использованием техники разработки интерфейсов веб-приложений. В основе создания интерфейса веб-приложения лежит устоявшийся стек технологий. Он включает язык разметки HTML (HTML 4, 5), каскадные таблицы стилей (CSS 2, 3) и скриптовый язык JavaScript с богатым выбором дополнительных библиотек (каркасов). Отдельного внимания заслуживает тот факт, что скорость появления новых полезных каркасов для языка JavaScript стремительно растёт, а это делает разработку, насыщенных функционалом приложений, более быстрой и удобной.
Теперь решение проблемы создания универсального GUI лежит на поверхности, но это только на первый взгляд.
Традиционный способ: Qt WebKit + Qt-костыли
Рассмотрим традиционный способ создания универсального GUI с помощью модуля Qt WebKit на примере модуля визуализации данных системы акустического мониторинга, разрабатываемой в рамках кандидатской диссертационной работы [3]. Под системой акустического мониторинга подразумевается система, включающая аппаратную и программную части. Аппаратная часть системы состоит из сенсорной сети акустических датчиков, данные с которых обрабатываются на микроконтроллере и отправляются по какому-либо интерфейсу (UART, IEEE 802.X и др.) на персональный компьютер (ПК). Программная часть состоит из набора прикладных программ, работающих как на локальном ПК (клиентское ПО), так и на удалённом сервере (серверное ПО).
Традиционный метод подразумевает использование межпроцессного

Рис. 1. Традиционный метод реализации универсального GUI
взаимодействия по средствам встроенного механизма Qt. Здесь подразумевается взаимодействие между основной логикой клиентского приложения, изображённой на рис.1 как Обработчик данных, и GUI-элементом. Одним из недостатков такого подхода является то, что код для реализации GUI на языке JavaScript будет иметь специфические функции, которые будут актуальны только для клиентского Qt-приложения. Для серверного приложения, отвечающего за GUI, нужен будет другой, специфичный для серверной реализации, код. Например, в случае использования PHP-скрипта для реализации основной логики серверного приложения, понадобится реализация межпроцессного взаимодействия с помощью какой-либо другой технологии (AJAX или WebSocket). Отсюда следует ещё один недостаток, а именно использование дополнительного языка программирования для реализации основной логики серверного приложения и разработка нового алгоритма межпроцессного взаимодействия.
Более интересный подход: Qt WebKit + WebSocket
Для решения этих проблем предлагается новый метод, основанный на использования упомянутой выше технологии WebSocket. Суть метода заключается в том, чтобы унифицировать метод межпроцессного взаимодействия между основной логикой приложения и GUI, как на клиентской стороне, так и на серверной. В этом случае появляется возможность использования JavaScript кода для реализации универсального для обеих сторон GUI.

Рис. 2. Новый метод реализации универсального GUI
На рис. 2. видно, что теперь для межпроцессного взаимодействия, как для клиентской, так и для серверной части используется технология WebSocket. То есть теперь мы имеем один универсальный JavaScript код для разных приложений. В этом случае необходимым условием является серверное приложение, основная логика которого реализована с помощью Qt, на не совсем привычном для веб-разработчиков, языке C++. С одной стороны такой подход к реализации серверного приложения усложняет задачу для узкоспециализированного веб-разработчика. Но с другой стороны мы имеем универсальные части кода, которые позволяют нам сэкономить время на дублировании одних и тех по смыслу алгоритмов на разных языках. Важно также подчеркнуть, что для использования технологии WebSocket необходима дополнительная библиотека, которая имеется в интернете в свободном доступе или включается по умолчанию в более поздние версии Qt.

Рис. 3. Локальное (справа) и серверное (слева) приложения, запущенные на ОС Ubuntu 14.04
На рис. 3 приведён пример реализации нового метода создания универсального GUI для ОС Ubuntu 14.04. Как видно на рисунке, в конечном итоге мы получаем универсальный интерфейс, как для локального приложения, запущенного в качестве исполняемого файла ОС, так и для серверного приложения, запущенного в современном веб-браузере. Так как для разработки ПО используются кроссплатформенные инструменты, это позволяет говорить о простой переносимости программного продукта на другие ОС в будущем.
Список литературы
1. Qt Documentation [Электронный ресурс]. Режим доступа: qt-project.org/doc
2. Visual Studio Library [Электронный ресурс]. Режим доступа: msdn.microsoft.com/en-us/library/vstudio
3. Молодые учёные – развитию текстильно-промышленного кластера (ПОИСК — 2014): сборник материалов межвузовской научно-технической конференции аспирантов и студентов с международным участием. Ч. 2. – Иваново: Иванов. гос. политехн. Ун-т, 2014. — С. 25 [Электронный ресурс]. Режим доступа: ti.ivgpu.com/poisk/file/part_2.pdf
P.S. Единственное, что на картинке бросается в глаза — это разные шрифты, но мне, честно говоря, тогда было не до них.
P.P.S. Можно ли запатентовать этот способ, чтобы на защите было чем козырнуть кроме свидетельства о регистрации ПО?
Как создать GUI на чистом C?
Освоил язык С в той мере, в которой предлагает мой IT-ВУЗ, считаю, что понимаю его вполне неплохо.
В связи с этим возникает желание можернизировать некоторые свои программы, добавив в них GUI.
В интернетах очень мало советов по этому поводу, поэтому и написал сюда:
может кто-нибудь писал программы на С с качественным графическим интерфейсом и как это делается?
- Вопрос задан более трёх лет назад
- 32089 просмотров
2 комментария
Оценить 2 комментария

Есть успехи?
nadom @nadom Автор вопроса
Решения вопроса 3
Знаю JS, PHP, C++, C#
Ещё есть visual c++ (на дотнете основан, можно юзать Windows Forms или Windows Presentation Foundation), который отлично стыкуется с обычным c++ через #pragma managed и #pragma unmanaged
Ответ написан более трёх лет назад
AlexP11223 @AlexP11223
@KOLANICH Visual C++ не основан ни на каком дотнете, это обычный компилятор С/С++. На дотнете C++/CLI (но его не стоит использовать, лучше уж C# тогда).
спасибо, действительно, язык называется c++/cli. Шарп — хорошая штука, но с native c++ плохо и неудобно стыкуется.
OpenGL лучше всего в данном случае подойдет.
Ну или библиотечку какую-нибудь использовать вроде lesstif.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
На голом си не так уж много GUI библиотек. Пожалуй самая навороченная из кросс-платформенных, свободных это Gtk++.
Ну если вам только под винду то можно конечно взять WinAPI, хотя имхо это самый проигрышный вариант.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 4
Full-stack developer (Symfony, Angular)
Берете Qt, осваиваете C++ а на сях пишите только библиотеки.
p.s. сишные программы должны быть только под консоль, ибо это тру.
Ответ написан более трёх лет назад
Нравится 6 2 комментария
nadom @nadom Автор вопроса
почему под консоль?
@nadom потому что тру?
PostgreSQL DBA
Раскуриваете API той графической оболочки, под которую пишете, и создаёте гуй.
На сколько помню свои эксперименты десятилетней давности — одно только создание пустого окна на WinAPI — порядка 200 строк кода.
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Да ладно, двухсот строк.
#include long CALLBACK wndproc(HWND hwnd,ui msg,ui wp,long lp) < return DefWindowProc(hwnd,msg,wp,lp); >int main()
@jcmvbkbc , тогда прошу прощения. Наверное, там было или не пустое окно, а хоть с чем-то управляющим или странный бредокод (что более вероятно для в те времена школьника).
Не сохранилось и с тех пор с программированием под win не сталкивался.
Push Pull @deadbyelpy
Интересно что значит с «качественным», полагаю что «хорошесть» интерфейса — его удобство, а если вы про удобную разработку, так хм, ну как придется.
есть iUP,GTK+, и еще другие, вам нужна кроссплатформенность?, а рисовать вы желаете системные контролы — доки по этому есть, или собственные? — копайте Qt например, там свои контролы рисуются.
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Важно определиться под какую платформу.
Если винда то можно использовать Visual Studio и Windows Forms.
Правда надо будет хорошо знать WinAPI, тк VS рассчитан на работу с с++.
И многие вещи придется делать руками. Окошко с кнопочками в VS создается без проблем, а вот с подключением к ним событий намучаетесь.Тк язык си может лишь иммитировать ооп, а как это делать это отдельная сложная тема.
Можно использовать Qt Creator. Он тоже представляет возможности создать gui. Но эта ide тоже заточена под с++ и ООП парадигму. Хотя писать в ней на си можно и прилажухи с gui, но с костылями.
Сейчас для создания gui на чистом си используют визуальный дизайнер интерфейсов Glade gtk. Он сам целиком и полностью написан на си. В нём используется библиотка виджетов GTK+ которая тоже написана на чистом си.
Проект поддерживается GNOME Foundation.
Описание визуально создаваемого разработчиком интерфейса сохраняется в файлах формата XML, которые затем могут быть подключены к программам во время исполнения с использованием объекта GtkBuilder.
Для работы с си использую Code Blocks IDE, она у меня установлена и в винде и в линуксе.
При создании проекта к нему подключается библиотека GTK+ и файл xml c описанием виджетов созданных в Glade.
Не Windows единой: как писать кросс-платформенные приложения с GUI на C#
На C# можно создавать красивые приложения, но до недавних пор — не для всех платформ. Рассказываем, как писать одно приложение для всех ОС сразу.



Евгений Кучерявый
Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Microsoft выпустила уже третью версию кросс-платформенного .NET Core с открытым исходным кодом, но мы до сих пор не получили инструмента для создания графических интерфейсов.
Пока есть Xamarin, который можно использовать только для Windows 10 и мобильных устройств. Но что делать тем, кто хочет создавать графические интерфейсы для Linux или Mac OS?
Тут помогут фреймворки от сторонних разработчиков.
Какой фреймворк выбрать
Мне удалось найти два более-менее популярных фреймворка (оба основаны на Skia):
- SpaceVIL. Он привлёк меня тем, что в нём элементы GUI отрисовываются, а не берутся из API операционной системы. Поэтому приложение будет выглядеть одинаково на всех устройствах. В нём даже можно создавать собственные элементы любого вида. Однако он пока довольно сырой — об этом говорит уже то, что в официальной документации есть ошибки в инструкции для новичков.
- AvaloniaUI. Это более популярный и проработанный фреймворк, который позволяет создавать интерфейсы как для мобильных устройств, так и для Linux и OS X. Также в нём используется диалект XAML, что будет плюсом для тех, кто пробовал создавать приложения для Windows. В нём даже есть поддержка MVVM.
Я попробовал оба, и второй показался мне более удобным: в нём есть язык разметки, поддержка MVVM, быстрая установка, лёгкий переход с WPF. Поэтому я выбрал его.
Как начать использовать AvaloniaUI
Я буду создавать приложение в Linux Ubuntu, но эта инструкция подойдёт всем, кто использует .NET Core. Создавать приложения можно и в Visual Studio, скачав для него расширение, но так как его нет на Linux, я буду пользоваться терминалом.
Для начала клонируйте себе на компьютер этот репозиторий:

В нём находятся шаблоны для создания приложения с AvaloniaUI. Если вы не умеете пользоваться Git, то просто скачайте содержимое и распакуйте куда-нибудь на компьютере. Затем откройте консоль и введите следующую команду:
Теперь приложение можно просто скомпилировать для разных ОС — никаких дополнительных манипуляций для переноса на новую платформу не требуется.
Заключение
10–15 лет назад это показалось бы извращением, но сейчас мы можем писать программы для Linux на языке, который изначально был предназначен для разработки приложений под Windows.
Читайте также:
- Как работает .NET и зачем он нужен
- Подкасты, фронтенд, нетворкинг: как попасть в IT-комьюнити и учиться бесплатно
- Пишем мессенджер на C#. Часть 1. Вёрстка