Что такое вариант построения С++ GUI с самой легкой кривой обучения - VS/Qt/wxWidgets/и т.д.?

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

Qt и wxWidgets кажутся наиболее популярными вариантами для кросс-платформенных приложений, хотя кросс-платформенная не всегда важна для меня; Windows-only отлично, если это означает самую быструю кривую обучения.

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

Я думал, что Visual Studio будет иметь наименьшую кривую обучения, но когда я открываю тестовое приложение для графического интерфейса, я вижу кучу чужеземного вида, такого как караты (^) повсюду, - я нашел онлайн, что они означают "ручки" ", в котором я столкнулся даже с пониманием определения или цели (" вроде как указатели, но не реально ", в основном, как я их читал, люди определяют их).

Я почти ничего не знаю о wxWidgets или о том, как он сравнивается с Qt.

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

Любой вклад от людей, мудрее и более опытных, чем я, будет оценен:)

Ответ 1

Прежде всего, начните просто. Там многое для темы. Если вам трудно, не пытайтесь взять его сразу.

В большинстве хороших пакетов GUI есть учебники. Лучший совет, который я могу дать, - это попробовать каждую из них или, по крайней мере, пару из них. Они - лучшее краткое введение, которое вы можете иметь в библиотеке, которую вы выбираете, и если они хороши, они сужают то, что вам нужно, чтобы поглотить вначале. Это даст вам некоторую основу для сравнения, потому что каждый из них пытается сделать очень похожие вещи (и вы увидите некоторые из них, пока вы не закончите), но у них разные чувства. Вероятно, вы обнаружите, что у вас есть предпочтение одному, и с тем, с кем нужно серьезно. Это также даст вам представление о том, что сложно сделать с графическим интерфейсом отдельно от деталей одного пакета, который, если вы его использовали, вы не увидите. Лично я считаю, что подобные знания очень полезны, потому что это делает меня менее запугиваемым по частям.

Вот список учебников в одном месте, хотя вы, вероятно, уже видели их:

Во-вторых, мне кажется, что вам нужно получить глубокое понимание концепций программирования GUI, а не только конкретной библиотеки. Здесь нет никакой замены для книги. Я не знаю их всех длинным выстрелом, но лучшие из кучки не просто научат вас деталям инструментария, они научат вас общим понятиям и как их использовать. Вот несколько списков, которые нужно начинать с (и как только у вас есть названия, Amazon и Qaru помогут выбрать один):

В-третьих, воспользуйтесь инструментами проектирования (Qt Creator, VS form building и т.д.). Не начинайте, пытаясь прочитать весь код, который они генерируют: сначала запустите свои собственные небольшие программы. В противном случае это слишком сложно понять, что важно для базовой программы, а что нет. Детали теряются. Как только у вас есть основы, хотя, используйте их в качестве ссылок, чтобы узнать, как делать конкретные эффекты. Если вы можете заставить что-то работать в инструментах проектирования, вы можете посмотреть на определенный код, который они генерируют, чтобы попробовать свои собственные рукописные программы. Они очень полезны для промежуточного обучения.

Я не слишком увлекаюсь изучением множества вещей, которые применимы только к самой платформе Qt, а не в целом.

Я второй комментарий GRB: Не беспокойтесь об этом. Вам нужно будет многому научиться для инструментария, независимо от того, какой инструментарий вы используете. Но вы также узнаете много общего с графическим интерфейсом программирования с помощью любого из достойных наборов инструментов, потому что им придется покрывать много одинаковой земли. Макеты, события, взаимодействие между виджетами/элементами управления, понимание таймеров - они появятся в любом инструментарии GUI, который вы используете.

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

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

Вам не нужно, чтобы большинство классов GUI без GUI правильно использовали Qt GUI. Существует несколько исключений (например, QVariant), которые вам понадобятся только потому, что их используют классы GUI. Я обнаружил, что вы можете изучать их в каждом конкретном случае.

Ответ 2

Что легче всего узнать, действительно будет зависеть от того, как вы лично учитесь.

Лично я нашел Qt самым легким для изучения до сих пор. Классы GUI довольно приятны в использовании, но я нашел классы, отличные от GUI, отличными, что позволяет избежать многих распространенных проблем, с которыми вы обычно сталкиваетесь с более простым API. Документация отличная, IMO, а также книги, примеры и т.д. Она также очень активно развивается, при этом появляется несколько новых технологий в ближайшем будущем (например, DeclarativeUI).

Я нашел Visual Studio/Windows API/.Net более сложным для изучения. Документация API на MSDN довольно сложна и не организована таким образом, что я нахожу интуитивно понятным.

Я несколько раз изучал WxWidgets, но мне никогда не нравилась документация по API.

Все это только мой личный опыт, конечно, YMMV. Я бы сказал, что просто повеселился во всех них и посмотрел, какой из них доставит вас дальше, не будет больно попробовать несколько.

Ответ 3

Как человек, который изучил С++ через Qt, могу только сказать, что они работают очень хорошо вместе. Пуристы С++ (как я и стал) найдут много вещей в Qt не по своему вкусу (препроцессор moc, например, и продолжающееся отсутствие исключений для сообщений об ошибках), но, оглядываясь назад, Qt предоставил очень нежное введение в С++ для меня.

И если вы похожи на меня, вы бросаете несколько ускоряющих libs в каждом проекте Qt, потому что мы хотим написать "настоящий" С++, а не смягченную вещь Qt использует:)

Ответ 4

Я бы предложил wxWidgets. Для меня это довольно интуитивно и выглядит хорошо.

Code:: Blocks был построен с ним, поэтому проверьте, нравится ли вам эта графика.

Существует также множество привязок для wxWidgets, таких как wxPython, wxErlang и другие, поэтому, если вы решили отключить С++, вы можете взять с собой wxWidgets.

Ответ 5

Я также использую wxWidgets и постоянно использую его для приложений только для Windows (единственный недостаток заключается в том, что wxWidgets печально известен большими файлами .exe, что может быть или не быть проблемой для вас). Я нашел его очень простым в использовании с самого начала, особенно в сочетании с дизайнером GUI (лично я использую wxDev-С++).

Я никогда не использовал Qt, поэтому я не могу говорить о его простоте, но я сомневаюсь, что это трудность в гораздо большем масштабе, чем у wxWidgets. Однако я могу сказать, что независимо от того, какой API вы используете (wxWidgets, Qt, WinAPI и т.д.), Ваш код будет "заблокирован" в этой конкретной платформе, поэтому не беспокойтесь, если вы почувствуете, что обучение Qt заблокирует вас платформу Qt (потому что то же самое произойдет с любым из этих API).

Если вы работаете исключительно с Windows, вы можете сначала сделать несколько простых программ с WinAPI. Таким образом, у вас есть базовое понимание самого низкого уровня программирования графического интерфейса Windows, прежде чем вы перейдете на Qt/wxWidgets. Тем не менее, если вы действительно занимаетесь кросс-платформенным программированием, тогда не беспокойтесь об этом и переходите прямо в Qt/wxWidgets.

Ответ 6

Я не могу разумно прокомментировать аспект кривой обучения, но быстрый опрос вопросов StackOverflow показывает примерно в два раза больше вопросов Visual С++ в качестве вопросов Qt. Вероятно, это означает, что для Visual С++ существует большая группа поддержки. Можете сделать изучение этого немного легче, если есть больше людей, чтобы помочь.

Ответ 7

Независимо от того, что вы выбираете, я уверен, что это будет нелегко и безболезненно.

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

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

Ответ 8

Я рекомендую codegear С++ builder (ранее известный как borland С++ builder) из codegear, который поставляется с 30 пробными версиями. Самое приятное в этом заключается в том, что GUI предоставляет вам компоненты, которые вы бросаете в форму в стиле WYSIWYG и выполняете функции, добавляя код для обработки событий, которые он запускает. Он поставляется с целым рядом компонентов из коробки, и вы можете добавить к нему сторонние компоненты, например, удивительный ExpressQuantumGrid из devexpress, или написать свой собственный. Это очень мощный, если вы знаете, что делаете, но достаточно интуитивно понятным, чтобы новичок мог написать приложение CRUD базы данных примерно в 20 строках очень простого кода.

Ответ 9

Так как никто еще не упомянул об этом, ради полноты, у вас есть плагин для инструментария Fox. Это тот, который я использовал в прошлый раз, когда я выполнял любую работу на С++ UI по своему собственному желанию. Есть также привязка для этого к Ruby и Python (последний из них устарел много лет).

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

  • стиль менеджера макетов
  • стиль регистрации обработчика событий
  • Как родной набор виджета выглядит/может быть создан для просмотра

Ответ 10

Qt - лучший вариант для вас. Это самый простой способ узнать, самый элегантный и мощный, и он абсолютно свободен.

  • Visual С++: это IDE, но в нем есть собственная библиотека GUI, называемая MFC. MFC - это старая библиотека со множеством причуд, и ее трудно изучать и использовать. Многие программисты на C++ используют его в Windows, потому что он исходит из MS, он быстро и свободен, если вы покупаете Visual С++. Поскольку VС++ является IDE, вы также можете использовать wxWidgets и Qt, хотя в вашем конкретном случае я бы рекомендовал Qt Creator вместо этого.

Кажется, вы экспериментировали с Managed С++. Не используйте это, даже MS рекомендует использовать Managed С++ только как клей между С++ и С#.

  • wxWidgets: Этот был сильным соперником до того дня, когда Qt стал бесплатным для коммерческих проектов. Это всегда было в тени Qt, и известно, что документация не очень хорошая, и API не так легко узнать, как Qt. Кросс-платформенный MFC был бы хорошим способом описать его.

  • С++ Builder: Borland сделал слишком много ошибок с С++ Builder и в конечном итоге вышел из бизнеса разработчиков. Это был хороший продукт, и я изначально изучил программирование Windows GUI в одной из первых версий, но я больше не буду его использовать. Есть лучшие варианты, и это слишком дорого.

Ответ 11

Если кросс-платформирование не требуется, попробуйте .net + msvs или delphi. легко, все-в-одном, без боли.