Каковы преимущества/недостатки QCustomPlot, по сравнению с Qwt?

Я использую Qwt сейчас уже два года. Мне нравятся его объектно-ориентированные классы, что упрощает адаптацию графиков и функциональных возможностей. В эти дни QCustomPlot становится все более популярным и конкурирует с Qwt. Конечно, я действительно сравнивал API. Однако меня интересуют свидетельства опытных пользователей из обеих библиотек. Что удобно? Что не так? Есть ли подводные камни?

Ответы

Ответ 1

Я бы не назвал себя "опытным", так как я использовал Qwt всего несколько месяцев и QCustomPlot в течение нескольких недель. При этом мои впечатления:

  • В настоящее время QCustomPlot более активно развивается. Последний выпуск был в августе 2012 года (тогда как последний выпуск Qwt относится к 2011 году). Субъективно его интерфейс кажется более "согласованным" с каркасом Qt.
  • Qwt, с другой стороны, кажется более зрелым и функциональным. Например, текущая версия QCustomPlot не имеет прямого способа установить цвет фона для прямоугольника оси (поддерживается только настройка фона для поддерживаемой пользователем pixmap). Другой пример - Qwt имеет специальные классы и методы для облегчения построения и масштабирования кривых с очень большим количеством точек. Я не нашел ничего подобного в QCustomPlot.

EDIT: автор QCustomPlot осведомлен о недостающей функциональности для установки фона фона и promises, чтобы добавить его в предстоящую версию.

Также существует еще одно важное различие между QCustomPlot и Qwt - лицензированием.  - Qwt - LGPL, поэтому вы можете связать его с проектом, отличным от GPL. QCustomPlot - это GPL v.3, который многие люди (включая меня) находят WAY слишком ограничительным. Автор QCustomPlot приглашает связаться с ним, если вы хотите получить лицензию LGPL.

EDIT2 (25 марта 2013 г.): Новые выпуски Qwt-ветвей 5. * и 6. * появились в ноябре, что отменяет "более активно развитое" преимущество QCustomplot

Ответ 2

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

Плюсы QCustomPlot:

  • Публично доступно на Gitorious,
  • Живая пользовательская база, желающая помочь (включая самого автора),
  • Открытость к лицензированию LGPL (в обмен на пожертвование, в моем случае),
  • Очень чистый и сжатый интерфейс,
  • Очень легко найти ошибку, если она присутствует (мои исправления редко были длиннее одной строки)
  • Легко расширяется;
  • Очень взломано в то, что вы хотели бы разбить из декартовой библиотеки заговора,
  • Хорошая документация,
  • Доступный в сжатом виде 1.h и один .cpp файл - удобный для быстрой интеграции или специально созданных одновидовых,
  • Очень хорошая производительность (во всех моих случаях использования),
  • Очевидно, что автор любит хороший код и может его создать,
  • Очень хорошо продуманная дорожная карта (в течение долгого времени).

Недостатки QCustomPlot:

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

Если требуется лицензия LGPL-ish, возможно, не будет бесплатного варианта (зависит от рассмотрения автора). Учитывая качество и удобство использования библиотеки, пожертвование, предоставленное моей компанией в обмен на лицензионное соглашение LGPL, не было необоснованным.

Ответ 3

При расчете множества точек. и пользователь сконцентрирует точку на целом участке. т.е. (ось x, y полностью покрыта пикселями)

(подсчет очков = приведенный ниже расчет)

при перетаскивании графика:

  • Qwt дает способ намного повысить производительность по сравнению с QCustomPlot.
  • Перетаскивание/повторное использование QCustomPlot отстает от Qwt, что плохо для пользовательского интерфейса.
  • Отклонение Qwt невелико и приемлемо.
  • Qwt требует меньше обработки.

Что я заметил: в то время как перетаскивание, Qwt только перетаскивает область графика и после того, как она отбрасывает ее на область. в то время как QCustomPlot пытается выполнить повторную загрузку перед отбрасыванием. (обратите внимание, но это может помочь ребятам QCustomPlot сделать это лучше.)


Кроме того, Qwt предоставляет опцию raw buffer, которая может управляться извне. я смог уменьшить (QcustomPlot) 150 Мб до меньшего (Qwt) 40 Мб. учет,

QCustomPlot заставляет пользователя выделять память на ось X (errorbar +, errorbar-), ось y (errorbar +, errorbar-) (2 * 2 * sizeof (double)) память теряется из 3 * 2 * sizeof (double) т.е. 32 байт из 48 байт - это отходы (для 1 выборки), где только для Qwt требуется 16 байт для одного образца (для x и y).

afai понять, ошибка может быть достигнута и в Qwt

  • равное количество точек (96KiloSamples/sec * 10 секундная буферизация = 96 * 1000 * 10 = ~ 1M)
  • Сглаживание отключено в QCustomPlot и включено в Qwt
  • Тот же алгоритм повторной печати. (принимать данные в тот же промежуток времени с устройства и после пожара)

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


ПРИМЕЧАНИЯ:

  • Qwt зрелый, эффективный.
  • QCustomPLot дает лучший внешний вид. (немного лучше, чем Qwt.)

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

Протестировано:

  • Qwt 6.1.0, скомпилированный для Qt5
  • QCustomPLot 1.2.1, скомпилированный для Qt5
  • Qt5.2.1
  • Linux localhost.localdomain 3.13.11-100.fc19.x86_64 # 1 SMP Wed Apr 23 20:10:57 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  • i3-3120M CPU @2.50GHz x 4

также, QCustomPlot принимает одинаковые значения на Qt4.

это мои находки и могут варьироваться от условий к условиям.

У меня есть возврат к Qwt. надеюсь, что это поможет другим в выборе.:)


второстепенный:

  • Con QCustomPLot требует отдельного qmake файла для загрузки. (разочарование для начинающих)
  • Con Qwt имеет несколько файлов для компиляции.
  • Pro QCUstomPlot имеет только два файла: источник и заголовок
  • Con Ни один канал не имеет канала IRC (по крайней мере, не на Freenode)
  • Con QCustomPlot имеет несколько примеров, вставляемых в один исполняемый файл.
  • Pro Qwt имеет множество примеров, распределенных по многим исполняемым файлам
  • Con QCustomPlot не имеет плагина QtCreator
  • Con QCustomPlot недоступен в репо (по крайней мере, не на Fedora 19)
  • У Pro Qwt много других лакомств.
  • Con Qwt является громоздким: p
  • Поддержка Pro Qwt CMake
  • Pro Qwt гораздо более гибкий (afaif)

пожалуйста, поправьте меня, если я ошибаюсь в некоторых точках.

Ответ 4

Плюсы:

  • Легко начать IMO (API интуитивно понятен и хорошо документирован)
  • Хорошее качество изображения и быстрая реакция при панорамировании и масштабировании.
  • Отдельный файл .h/.cpp(т.е. не нужно ссылаться на скомпилированные библиотеки, отличные от QT)

Минусы:

  • GPL (не LGPL)
  • Внутренне использует структуру данных, которая хранит 6 double для каждой точки данных, даже если вам нужны только X и Y
  • Внутри он использует QMap для хранения точек данных и сохранения их сортировки. Очень эффективна для панорамирования и масштабирования, но очень медленно заполняется, когда количество образцов велико (например, 1 000 000 точек данных).