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

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

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

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

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

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

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

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

11 ответов


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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


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

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

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


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

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

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


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


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

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

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


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


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

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

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

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

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

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

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

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


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