Какой вариант построения графического интерфейса C ++ с самой простой кривой обучения - VS / Qt / wxWidgets / и т. Д.?

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

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

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

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

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

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

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


person Tristan    schedule 27.07.2009    source источник
comment
Все эти караты в VC++ предназначены для C++/CLI. Это специфичные для .NET дополнения к языку, обеспечивающие интеграцию с CLR.   -  person Harper Shelby    schedule 27.07.2009


Ответы (11)


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

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

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

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

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

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

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

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

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

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

person quark    schedule 27.07.2009

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

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

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

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

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

person Kitsune    schedule 27.07.2009
comment
Я поддерживаю эту рекомендацию. Я использовал Qt, чтобы мое приложение было кроссплатформенным. Обычно переход на кросс-платформу требует БОЛЬШЕГО количества работы, но поскольку Qt в целом был так хорошо организован и полезен, я обнаружил, что на самом деле это более продуктивно, чем написание целевого приложения для одной ОС, например, на C#, особенно если вы застрять в квази-C++ мире управляемого кода (эти караты). Тем не менее, я согласен с другими комментариями здесь, чтобы следить за собой, есть чему поучиться. Но есть большая награда, если вы держитесь там — нет ничего более полезного, чем видеть свои усилия на экране. :-) - person moodboom; 10.02.2013

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

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

person Marc Mutz - mmutz    schedule 27.07.2009

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

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

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

person samoz    schedule 27.07.2009

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

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

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

person GRB    schedule 27.07.2009

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

person Stewbob    schedule 27.07.2009
comment
Или это означает, что VC++ в два раза более запутанный, чем Qt. :-) Или что есть много вопросов по VC++, которые не относятся к графике. Я считаю, что здешнее сообщество может хорошо поддержать и то, и другое. - person David Thornley; 27.07.2009

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

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

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

person Nemanja Trifunovic    schedule 27.07.2009
comment
С FLTK довольно легко работать, и он довольно кроссплатформенный. - person Paul Nathan; 29.07.2009

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

person Gary Benade    schedule 27.07.2009

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

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

  1. стиль менеджера компоновки
  2. стиль регистрации обработчика событий
  3. Как выглядит набор виджетов в родном виде/можно ли сделать так, чтобы он выглядел
person Steve Gilham    schedule 29.07.2009

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

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

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

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

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

person rpg    schedule 29.07.2009

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

person fat    schedule 20.12.2011