Хорошая библиотека С++ GUI для Windows
Я ищу хорошую графическую библиотеку Windows для С++. Идеальными характеристиками, на мой взгляд, должны быть:
- Современные. MFC, wxWidgets, Qt были запущены давным-давно, и они не используют современные возможности С++ и стандартную библиотеку.
- У вас есть богатый набор элементов управления с достойными функциями. Возможность отбрасывать HTML почти повсюду - это счастье, для которого я обожаю wxWidgets, когда я его не ненавижу.
- Открытый исходный код. Это обязательно. Если источники доступны после покупки, тогда он считается одобренным.
- Определить конструктор форм. Да, было бы здорово. После долгих лет работы с Delphi я плачу каждый раз, когда я должен вручную указывать размеры управления.
- Бесплатно для коммерческого использования. Но если какая-то библиотека ДЕЙСТВИТЕЛЬНО хорошая, то я буду покупать ее.
- Кросс-платформа. Эта спецификация - всего лишь тай-брейк ☺. Я могу жить без этого.
Пожалуйста, предложите свои идеи для кандидатов. Одна библиотека за каждый ответ.
Ответы
Ответ 1
Я думаю, вы слишком быстро пишете Qt; он не использует стандартную библиотеку много, но это имеет меньше общего с устаревшими, чем с разными приоритетами. Контейнеры QT используют итераторы, алгоритмы шаблонов и т.д., Но имеют другую модель итератора; Итераторы Qt указывают между элементами, а не на них. Это делает симметричным обратное и обратное пересечение и очищает некоторые краевые случаи для вставки и удаления элементов во время перемещения, хотя это немного менее эффективно. И они также предоставляют итераторы стиля STL. Это правильный выбор для библиотеки графического интерфейса IMO; производительность контейнеров вряд ли будет критическим фактором.
Что касается препроцессора (moc), подумайте об этом скорее как компилятор IDL, который знает, как читать заголовки С++, а не использовать свой собственный язык. Он не обрабатывает ваш код, который скомпилирован напрямую. Он просто создает дополнительный файл cpp, содержащий маршалинг для обратных вызовов сигналов/слотов, которые могут стать довольно беспорядочными, когда они пересекают границы потоков и нуждаются в синхронизации.
Qt является бесплатным, если вы можете выпускать свои источники (даже для коммерческого использования, сколько собственных инструментов действительно нуждаются, чтобы быть собственными), и не необоснованно оценивать, если вы не можете (нет - роялти или что-то особенно раздражающее)
Ответ 2
Если вы ищете современную библиотеку графического интерфейса С++, Adam и Eve из Adobe Source Library (ASL) - это правильная вещь (она в значительной степени опирается на Boost libraries).
Что мне действительно нравится в этом, так это то, что дизайн макета полностью отделен от кода. Определение макета может быть во внешнем файле, так что пользователь может изменить макет, не перекомпилируя программу.
Пример с сайта:
layout clipping_path
{
view dialog(name: "Clipping Path")
{
column(child_horizontal: align_fill)
{
popup(name: "Path:", bind: @path, items:
[
{ name: "None", value: empty },
{ name: "Path 1", value: 1 },
{ name: "Path 2", value: 2 }
]);
edit_number(name: "Flatness:", digits: 9, bind: @flatness);
}
button(name: "OK", default: true, bind: @result);
}
}
Что будет производить:
![clippingpath]()
Кроме того, ASL также имеет некоторые полезные полезные утилиты.
Изменить: но он (пока) не получил конструктора форм.
Ответ 3
WTL - это современная инфраструктура графического интерфейса, созданная Библиотека шаблонов Windows
Библиотека шаблонов Windows (WTL) - это Библиотека С++ для разработки Windows приложений и компонентов пользовательского интерфейса. Это расширяет ATL (активная библиотека шаблонов) и предоставляет набор классов для элементы управления, диалоги, окна кадра, GDI объектов и т.д.
Неофициальная документация находится в Code Project.
Ответ 4
Вы должны взглянуть на gtkmm. Он написан в современном С++, использует stl, следует его соглашениям, включает поддержку utf-8. Что еще, это open source, кросс-платформенный и лицензированный под lgpl. На своем сайте:
Особенности:
- Использовать наследование для создания пользовательских виджетов.
- Тип-безопасные обработчики сигналов в стандартном С++.
- полиморфизм.
- Использование стандартной библиотеки С++, включая строки, контейнеры и итераторы.
- Полная интернационализация с UTF8.
- Полное управление памятью С++
- Состав объекта
- Автоматическое освобождение динамически распределенных виджетов.
- Полное использование пространств имен С++.
- Нет макросов.
- Кросс-платформенная: Linux (gcc), FreeBSD (gcc), NetBSD (gcc), Solaris (gcc, Forte), Win32 (gcc, MSVС++.NET 2003), MacOS X (gcc), другие
- Бесплатное программное обеспечение и бесплатно для Open Source и собственной разработки.
- Обсуждаются, разрабатываются и внедряются публично.
Ответ 5
wxWidgets - бесплатно, разрешено для коммерческого применения со многими дизайнерами (http://wxdsgn.sourceforge.net/, http://www.dialogblocks.com/, http://wxformbuilder.org/, http://wxglade.sourceforge.net/...).
Я лично пишу много своих виджетов с нуля, но это всегда не вариант.
Ответ 6
Взгляните на eGUI ++, получив хорошую современную объектную модель. Вы можете увидеть статью MDN Привести простоту Windows Forms к родным приложениям И вы можете загрузить код от John Torjo веб-сайт
Ответ 7
Я бы очень рекомендовал JUCE, это хороший чистый современный С++, который хорошо документирован с комментариями пользователя. Он имеет широкий спектр классов gui и его очень просто расширить существующие. В библиотеке больше, чем просто gui, есть много кода для манипуляций и генерации звука, для потоковой передачи, чтения/записи современных форматов изображений, базовых сетей и многого другого. Он также выглядит хорошо (по умолчанию он похож на OS X) и является кросс-платформенным.
Нижняя сторона: хотя она бесплатна (в обоих смыслах) для некоммерческого использования, для коммерческого использования требуется коммерческая лицензия, которая является довольно дорогостоящей.
В общем, определенно стоит посмотреть, я использовал его для нескольких проектов хобби, один из которых я намерен выпустить в какой-то момент. Это на самом деле делает gui-кодирование в С++ весело, и это что-то говорит!
Ответ 8
В свое время у меня был интерес к Ultimate ++. Хорошая лицензия (BSD), IDE, поддерживает различные компиляторы, используемые в ряде сложных приложений реального мира (что очень важно!) И т.д.
У меня никогда не было времени инвестировать там, но я все еще рассматриваю это как интересную альтернативу.
Ответ 9
Библиотека Nana С++ нацелена на удобную и портативную библиотеку, она предоставляет инфраструктуру GUI и потоки для простого программирования с использованием современных методов С++, таких как черты, метапрограммирование и другие технологии шаблонов.
Блог для этого проекта: http://sourceforge.net/p/nanapro/blog
Загрузите последнюю версию на http://sourceforge.net/projects/nanapro
Ответ 10
Я бы сделал второй взгляд на Qt - он не был бесплатным для коммерческого использования, но у них хорошая лицензия начального уровня, если вы только начинаете. Я думаю, что их интерфейс довольно современен, хотя мне не нравилось, что они, похоже, полагаются на языковые расширения, которые они препроцесс.
Что конкретно вы ищете в современной категории?
Ответ 11
Интересно, почему этого раньше не упоминалось: я бы рекомендовал CEGUI, который является кросс-платформенным (включая Windows) и поддерживает OpenGL, а также DirectX, что позволяет без труда интегрировать его в любую игру или приложение визуализации/визуализации. Он также, кажется, отвечает всем вашим требованиям.
-
Современный (использует STL, XML для своих файлов активов и внутренне поддерживает стандарт C99 для максимальной совместимости после 1.0 Отпустите его, используя С++ 11 в ветке разработки). Он также поддерживает символы юникода и все типы языков (как видно из образцов).
-
Предлагает следующие виджеты из окна: текстовые поля (прокручиваемые), поля редактирования, многострочные правки, прядильщики, флажки, кнопки, переключатели, окна с вкладками, прогресс полосы, прокручиваемые панели, ползунки, выпадающие меню (comboboxes), панели меню, контейнеры макетов (вертикальные/горизонтальные) и многое другое
-
Опубликовано в лицензии MIT Open Source, одна из лицензий, предоставляющая вам наибольшую свободу, вам нужно будет только распространять файл лицензии с приложением и
-
Макеты можно легко создать и отредактировать, используя WYSIWYG редактор, написанный на Python. Он называется CEED и также свободно доступен. Он прошел множество испытаний и подходит для производства. Опубликован стабильный релиз, а новые функции находятся в разработке на будущее. Редактор набора изображений также доступен в одном приложении.
-
Как указано, это бесплатно для коммерческого использования. Единственное обязательство, которое у вас есть, - это распространять файл лицензии.
-
CEGUI подходит для использования кросс-платформенной. Он официально поддерживает Windows, Linux, Mac OS. Он также использовался на iOS и Android. Android поддерживается в ветке разработки.
Он был первоначально разработан как графическая библиотека для игр, но также идеально подходит для использования в научных приложениях, рендеринга приложений, визуализации. Настольные приложения также могут быть выполнены. Простой Windows-подобный скин доступен в активах по умолчанию.
Он существует уже более 10 лет, имеет активное сообщество и является надежной, многофункциональной и расширяемой библиотекой.
Ответ 12
Оба wx и QT могут использовать стандартную библиотеку.
Они содержат свои собственные классы коллекций (как и MFC) со дня, а не много лет назад, когда поддержка компилятора для STL была неоднородной. Некоторые дополнения, такие как строки с копированием на запись, еще не включены в STL.
Они могли использовать шаблоны для некоторых механизмов отправки, которые выполняются с помощью макросов (wx) или прекомпилятора (QT), но которые ничего не выиграют, кроме менее читаемого кода.
Ответ 13
Вы просмотрели инструментарий Fox?
Ответ 14
Я должен бросить свою шляпу с помощью Qt. Мы являемся владельцем коммерческой лицензии Qt, и в то время как дорого стоим каждый доллар. База кода Qt очень прочная. Дизайнер GUI - один из лучших инструментов такого рода. Некоторое время назад мы оценили группу инструментов GUI, доступных для окон друг против друга, и Qt вышел вперед в каждом аспекте, поэтому я видел некоторые из этих других наборов инструментов.
Если вы хотите, чтобы пули здесь были моими...
-
Объектно-ориентированный, Qt имеет очень приятную архитектуру OO, которая очень согласована во всей иерархии классов
-
Сигналы и слоты дают вам хороший способ справиться с проблемой обратного вызова, всегда присутствующей при разработке пользовательских интерфейсов
-
Хотя это немного сложнее, он направляет вас к архитектуре MVC, что не так уж плохо
-
В дополнение к большому набору классов пользовательского интерфейса существует почти больший набор других классов, поддерживающих операции БД, Threading, Networking и другие задачи.
Да Qt использует не STL-контейнеры, а не STL-строки. Но не позволяйте этому быть вашим критерием для дисквалификации QT. В контейнерах QT есть STL, как итераторы, а класс String имеет множество функций. И последнее, но не менее важное: поддержка имеет многоплатформенную поддержку.
Ответ 15
Я голосую за WTL. Легкий и родной. Вы не можете победить эти два критерия с моей точки зрения. Я пишу свой модельный слой в stl С++ и использую собственные библиотеки для каждой операционной системы. Это гарантирует, что ваши приложения не будут выглядеть как задница и позволят вам использовать самый широкий диапазон функций на каждом os.
Для дизайнера GUI WTL я рекомендую отличную, но по какой-то причине совершенно неизвестную для большинства WTLBuilder: www.wtlbuilder.com.
Ответ 16
Недавно я начал искать GUI и начал экспериментировать с каждым из них.
Насколько я могу сказать:
- Qt - это не только библиотека графического интерфейса, но и структура (включая поддержку ECMAScript, SQL, XML и т.д.).
- Qt является твердым выбором, и его можно понять путем взлома примерно через полчаса.
- К сожалению, Qt заставляет вас использовать свою модель программирования, но вы можете легко избежать этого и написать код в своем стиле.
- Qt принадлежит Nokia, и если вы являетесь человеком, который рассматривает политические проблемы при выборе библиотеки, Nokia недавно заключил сделку с Microsoft, чтобы использовать Windows Phone 7 на своих телефонах.
- GTK + был моим личным выбором, но он не был родным на каждой платформе. Хотя он работает с той же скоростью, что и собственные средства управления Windows, иногда быстрее.
- Порты wxWidgets являются родными на каждой платформе, и это моя вторая личная ссылка после GTK +, поскольку она не ориентирована на прибыль.
Ответ 17
Как насчет Smartwin ++?
Их вики, похоже, сейчас нет. Пример Код Hello World! от Smartwin ++ docs
Ответ 18
Поскольку вы назвали Delphi: вы знаете, Borland С++ Builder также делает VCL, как Delphi? Вы можете распространять его бесплатно, и вы получаете исходный код.
Ответ 19
Как насчет winx?
Ответ 20
Лучше поздно, чем никогда, но вы можете найти это интересное. Вашими единственными требованиями, которые он удовлетворяет, являются "Open Source" и "Free". Он делает то, что вы не просили
-
уменьшите исходный код на порядок
-
дает вам полный контроль над компоновкой, привязкой данных, переменными массивами элементов управления и т.д.
Когда вы видите, как это работает, вы можете легко добавить свои собственные элементы управления.
BTW - у него есть еще один недостаток - это вызывает привыкание.
Ответ 21
Я рекомендую использовать Qt, потому что:
- Он кросс-платформенный и охватывает широкий спектр операционных систем (включая мобильные).
- Это open source и имеет быструю скорость в улучшении
- У этого есть красивый графический пользовательский дизайнер и очень способный IDE (Qt Creator).
- Дизайн API превосходный и простой в использовании
- У него отличная документация, которая легко читается
- У него есть система перевода Qt, которая позволяет вам иметь многоязычное приложение.
- Система компоновки графического интерфейса, в которой виджеты изменяются в соответствии с макетом, делает все гораздо проще.
- QML дает вам возможность создавать фантастический графический интерфейс с отличной графикой и анимацией.
- Он имеет отличную поддержку для сетей и подключения (сокет, SSL, www, IPC,...)
- Он имеет QTestLib для тестирования кода
- У него много языковых привязок, если вы не хотите использовать С++