Запуск wxWidgets C++ требует легкого толчка

Итак, я изучаю C# уже около года (мне 20 лет), и я довольно уверенно в нем разбираюсь. Я также время от времени вмешивался в C++. Например, совсем недавно я следил за уроками Nehe OpenGL для C++, и я нахожу это интересным способом обучения. .

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

Поэтому я погуглил несколько новых графических интерфейсов и решил поиграть с wxWidgets (решил против Qt из-за лицензирования). Я скачал его, скомпилировал и посмотрел, есть ли подключаемые модули IDE для RAD. разработки, как вы можете себе представить, переходя от перетаскивания компонента к форме в C#, я надеялся на что-то подобное.

Я узнал, что code::blocks имеет что-то подобное, поэтому я попробовал это. Все было в порядке, но что меня отталкивало, так это ужасное завершение кода; он будет отображать только члены и методы в текущем объекте и ничего для файлов заголовков #included. Я понимаю, что завершение кода/IntelliSense не так просто для C++, но Visual Studio 2008 справляется с этим довольно хорошо. . Я нашел некоторые другие инструменты RAD, такие как wxFormBuilder, но это стоит денег, а не то, что я хочу делать просто для обучения.

Итак, мой TLDR вопрос: есть ли у кого-нибудь опыт работы с wxWidgets? Вы просто разрабатываете в удобной для вас среде IDE и просто кодируете графический интерфейс? В смысле без визуальных помощников? Может, подскажете, в каком направлении мне двигаться? :)

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


person Daniel    schedule 21.01.2010    source источник
comment
Qt — это LPGL — чем эта лицензия вам не нравится? ИМО, Qt является более полной и профессиональной структурой. Не считайте это.   -  person JimDaniel    schedule 21.01.2010
comment
Хм, я думаю, что с LPGL вам не разрешены статические ссылки? И мой код должен быть с открытым исходным кодом? Я пытался прочитать информацию о лицензировании, но это был огромный TLDR, поэтому я подумал, что бесплатный wxWidgets будет более подходящим выбором. Возможно нет?   -  person Daniel    schedule 21.01.2010
comment
LGPL означает, что вы должны предоставить объектные файлы вашего приложения, чтобы разрешить повторное связывание с более новыми библиотеками QT... или что-то в этом роде :) Вот почему я использую wxWidgets - никаких проблем!   -  person Nathan Osman    schedule 21.01.2010
comment
LGPL означает, что вы должны отправить библиотеки Qt, вы не можете напрямую связать Qt со своим исполняемым файлом. В большинстве случаев вы будете делать это и с wxWidgets, так как статическое связывание имеет свою долю подводных камней и неприятностей.   -  person rpg    schedule 21.01.2010


Ответы (7)


Я предлагаю научиться делать макет графического интерфейса с помощью wxWidgets в коде, а затем, когда вы освоитесь, научиться использовать инструменты графического интерфейса.

Выполнение такой работы вручную какое-то время дает вам понимание того, что вам нужно («Хорошо, мне нужен wxSizer, вертикальный, чтобы поместить эти два горизонтальных wxSizer, где я помещаю свои wxStaticText и wxTextCtl для каждой строки. .")... где, как я думаю, если бы вы начали с инструментов с графическим интерфейсом, вы бы просто раздражались, потому что (в последний раз, когда я смотрел) ни один из них не был редактором перетаскивания, как вы получаете с .NET.

person RyanWilcox    schedule 21.01.2010
comment
+1 за визуализацию в голове. Я считаю, что если вы не можете представить, как это сделать вручную, то вы все равно не сможете исправить это в редакторе с перетаскиванием. - person Dashogun; 22.01.2010
comment
Я тоже начинал с этого, и это сильно повлияло на то, насколько хорошо я понял код, сгенерированный различными инструментами дизайна пользовательского интерфейса. - person Fraser Graham; 10.02.2010

Обязательно попробуйте Code::Blocks. Это ЗАМЕЧАТЕЛЬНАЯ среда для работы с wxWidgets. Она поставляется с конструктором форм и шаблонами для проектов wxWidgets, поэтому я не могу представить себе работу без нее.

Кроме того, для хорошего знакомства с wxWidgets для новичков попробуйте эту страницу. Мне очень помогло, когда я только начинал.

person Nathan Osman    schedule 21.01.2010
comment
Учебник, на который вы ссылаетесь, выглядит хорошо - жаль, что я не знал об этом раньше. Интересно, однако, что весь мой опыт работы с MFC был дьявольским - каждая проблема, с которой я сталкивался, требовала поиска странного заклинания, предоставленного экспертом где-то в сети. Почти все проблемы, которые у меня были с wxWidgets, я смог решить самостоятельно с помощью обычной программистской логики. Простая примерная задача; Изменение цвета статического текста. раствор МФЦ; Перехватывать целую кучу оконных сообщений и т.д. Решение wxWidgets; Вызовите метод .color() в элементе управления. Мой вывод; MFC только внешне похож на wx. - person Bill Forster; 21.01.2010
comment
МФЦ УЖАСНЫЙ! Я бы никогда не использовал его. И даже если бы мне пришлось, я бы ненавидел это. - person Nathan Osman; 21.01.2010
comment
Да, я полностью согласен. Поэтому удивительно, как часто звучит мантра о том, что wxWidgets — это всего лишь какая-то переносимая среда MFC. По моему опыту, несмотря на внешнее сходство, MFC — это проблема, а wxWidgets — решение. (В случае, если это сбивает с толку, почему я болтаю об этом, в остальном хороший учебник, на который вы ссылаетесь в своем ответе, уделяет много места сходству между MFC и wxWidgets). - person Bill Forster; 21.01.2010
comment
Одной из проблем code::blocks будет то, что вам нужно придерживаться gcc. - person Gray Programmerz; 16.07.2021

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

Для простых приложений вы можете собрать пользовательский интерфейс, используя смесь настраиваемых и стандартных виджетов без особых трудностей. Ознакомьтесь с примерами и демонстрациями wxWidgets, в которых используется этот подход. Мое шахматное приложение (см. мой сайт) тоже использует этот подход.

Более сложный пользовательский интерфейс можно было бы реализовать, написав что-то особенное на более высоком уровне абстракции. Я имею в виду подсистему, которая принимает гибкие запросы высокого уровня для обеспечения различных типов функций пользовательского интерфейса, а затем сортирует детали элементов управления, которые необходимо создать, позиционирование и т. д. самих этих элементов управления. Это своего рода моя техническая фантазия, но я никогда не пытался это сделать. На самом деле довольно примитивное средство этого типа уже доступно и используется в упомянутых мною демоверсиях; Он называется «Sizer» (класс wxSizer) и представляет собой контейнер управления.

Наконец, я хотел бы отметить, что проблемы с лицензией Qt в основном исчезли с тех пор, как Nokia купила Trolltech и сделала его «более» бесплатным (лицензия LGPL). Многие люди думают, что Qt — это путь в наши дни. Я очень доволен wxWidgets, но однажды обязательно серьезно оценю Qyt. Удачи в ваших проектах.

person Bill Forster    schedule 21.01.2010
comment
Правда, в c# он обычно решает случайным образом сделать вещи невидимыми, и это очень раздражает, эти штуки Sizer немного напоминают обратную стыковку. Круто спасибо за ваш вклад - person Daniel; 21.01.2010
comment
Сайзеры — прекрасный инструмент в руках тех, кто знает, что делает. - person Nathan Osman; 21.01.2010

Я разработал несколько графических интерфейсов приложений с помощью wxWidgets — вы можете увидеть скриншоты по адресу http://ravenspoint.com/.

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

Программа проектирования должна быть быстрой и простой. Я рекомендую http://www.balsamiq.com/

После того, как вы определились с дизайном, можно переходить к кодированию. Лично я считаю размещение виджетов на панели с помощью параметров wxPosition и wxSize конструкторов wxWidget тривиальным — проще, чем пытаться подтолкнуть виджеты в их точное положение с помощью мыши.

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

person ravenspoint    schedule 21.01.2010
comment
Я знаю, что это не решение, но я использую RAD для разработки формы, затем копирую и вставляю код в редактор и «исправляю его». Затем я интегрирую его в исходный код приложения. - person Nathan Osman; 21.01.2010
comment
Джордж - это решение, если оно работает для вас. Тем не менее, шаг «исправить это» звучит утомительно для меня. Интересно, будет ли он когда-нибудь создавать легко поддерживаемый код, например, со значимыми именами переменных и порядком кода? Проблема как с вашим, так и с моим подходом, конечно же, в итерации дизайна. По крайней мере, макеты GUI от balsamiq не претендуют на то, чтобы излучать код, и я не сталкиваюсь с редактированием смеси машинного и человеческого кода — это все моя собственная работа, хорошо это или плохо. Через некоторое время вы научитесь писать код с графическим интерфейсом, который легко корректировать, когда клиенты просят внести изменения. - person ravenspoint; 21.01.2010

wxFormBuilder, но это стоит денег

wxFormBuilder бесплатен и имеет открытый исходный код

Кроме того, Visual Studio лучше всего подходит для написания кода на C++ в wxWidgets, но вы столкнетесь с множеством проблем в Linux из-за того, как Visual Studio обрабатывает множество вещей, таких как имена файлов, вы должны уделять особое внимание чувствительности к регистру.

Кроме того, что касается графического интерфейса, добавьте wxFormBuilder в решение Visual Studio, добавьте обработчик типов файлов в Visual Studio. Теперь просто дважды щелкните по нему и добавьте свои диалоги, как вы делаете это в C#. Просто добавьте сгенерированные файлы кода в проект Visual Studio один раз, и все готово.

Очень легко использовать Visual Studio с программированием графического интерфейса в wxWidgets.

Также не забудьте посмотреть редактор CodeLite, если хотите портировать на Linux. Он очень совместим с проектами и сочетаниями клавиш Visual Studio.

person Priyank Bolia    schedule 21.01.2010
comment
Ах! wxWidgets в VC++ — путь к неприятностям. См. stackoverflow.com/questions/1916782/ и stackoverflow.com/questions/134029/ - person Nathan Osman; 21.01.2010
comment
Категорически не согласен, для начала нужен некоторый опыт, но как только вы загрузитесь, программировать с помощью VS очень быстро. И я могу сказать это, потому что я давно написал инструмент интеграции wxVS2008Integration (больше не доступен), и его очень легко использовать VS по сравнению с любой другой IDE. - person Priyank Bolia; 21.01.2010
comment
Используя как VC++, так и CodeBlocks, я могу честно сказать, что CodeBlocks лучше. Это не идеально, но все же лучше. - person Nathan Osman; 21.01.2010
comment
VS с мощными надстройками, такими как Visual Assist и wxVS2008Integration и т. д., не имеет себе равных, когда речь идет о производительности. CodeBlocks великолепен, но он не поддерживает так много вариантов повышения производительности и не имеет таких замечательных надстроек из-за своего открытого исходного кода. Лично я рекомендую CodeLite, для меня он выглядит лучше, чем CodeBlock в Linux, но он все еще новый и находится в активной разработке. - person Priyank Bolia; 21.01.2010
comment
Я использовал VC++ 2008 Express с wxWidgets (с wxVC и wxFormBuilder [установлен [wxPack]]), и они довольно хорошо работали вместе (до этого пробовал CodeBlocks, но для меня интеграция с отладчиком была довольно убогой). Также использовал CodeBlocks с wxWidgets (с wxFormBuilder) в Linux (но в меньшем проекте, поэтому мне удалось справиться с проблемами отладки). wxpack.sourceforge.net - person Eugen Constantin Dinca; 23.01.2010

Есть wxGlade и wxFormBuilder.

Я не знаю, есть ли другой, но известный мне wxFormBuilder бесплатный и с открытым исходным кодом.

Вы найдете ссылки на другие инструменты на домашней странице wxGlade (http://wxglade.sourceforge.net/).

Большинство этих программ могут выводить файлы xrc, которые представляют собой XML-представление вашего графического интерфейса. Он решает проблему сложности сгенерированного кода, но не такой мощный.

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

person f4.    schedule 21.01.2010

Я только что закончил делать программу hello world в wx и fltk, используя IDE netbeans. Microsoft Visual Studio WinForms или MFC было намного проще, чем любой из них. Мне нужна была кросс-платформенная возможность, поэтому я не мог использовать ее для этого приложения. Я закончил fltk гораздо быстрее, чем wx. Программа была проще, меньше, быстрее и проще в написании. У Wx была довольно разрозненная документация и организация. Fltk был разработан еще в «старые времена», когда ценились маленькие, быстрые и эффективные. Наверное, поэтому он кажется вам «старым». Я старый парень, поэтому это сработало для меня. YMMV

person Jay    schedule 19.02.2010