Хорошая библиотека С++ 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 и собственной разработки.
  • Обсуждаются, разрабатываются и внедряются публично.

Ответ 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 для тестирования кода
  • У него много языковых привязок, если вы не хотите использовать С++