#### Version 2.1.1 released on 06.11.22 ####
Added features:
- Qt6.4 Compatibility
Bugfixes:
- dynamically changing device pixel ratios (e.g. when moving between different DPI screens) is handled properly
- bugfix Colormap autoscaling: recalculateDataBounds() if (0, 0) data point is NaN.
- minor bugfix in getMantissa for certain values due to rounding errors
- Graphs with line style lsImpulse properly ignore NaN data points
- fixed issue where QCP wasn't greyed out together with the rest of the UI on embedded systems when a modal dialog is shown
(QCustomPlot no longer has the Qt::WA_OpaquePaintEvent attribute enabled by default)
Other:
- in QCPAxisPainterPrivate::getTickLabelData, don't use fixed 'e', but locale aware character of parent plot locale
- Axis rescaling now ignores +/- Inf in data values
- slight performance improvements of QCPColorMap colorization and fills.
#### Version 2.1.0 released on 29.03.21 ####
Added features:
- Compatibility up to Qt 6.0
- Tech Preview: Radial Plots (see setupPolarPlotDemo in examples project)
- QCPAxisTickerDateTime can now be configured with a QTimeZone for adjusting the label display to arbitrary time zones
- QCPColorGradient (and thus also QCPColorMap) now has explicit configurable NaN handling (see QCPColorGradient::setNanHandling)
- added timing/benchmarking method QCustomPlot::replotTime(bool average) which returns the milliseconds per replot
- QCustomPlot::plottableAt has an optional output parameter dataIndex, providing the index of the data point at the probed position
- QCustomPlot::plottableAt<T> template method allows limiting the search to the specified QCPAbstractPlottable subclass T
- QCustomPlot::itemAt<T> template method allows limiting the search to the specified QCPAbstractItem subclass T
- Added Interaction flag QCP::iSelectPlottablesBeyondAxisRect, allows selection of data points very close to (and beyond of) the axes
- QCPAxisTickerDateTime::dateTimeToKey(QDate &) now also takes a TimeSpec to specify the interpretation of the start-of-day
- QCPAxisTickerLog now switches to linear ticks if zoomed in beyond where logarithmic ticks are reasonable
- Added QCustomPlot::afterLayout signal, for user code that crucially depends on layout sizes/positions, right before the draw step during a replot
Bugfixes:
- Fixed bug where QCPLayer::replot wouldn't issue full replot even though invalidated buffers existed
- Fixed QCPCurve bug causing rendering artifacts when using keys/values smaller than about 1e-12 in some constellations
- Fixed getValueRange when used with explicit keyRange, now doesn't use key range expanded by one point to each side anymore
- Fixed bug of QCPAxis tick label font size change only propagating to the layout after second call to replot
- Fixed bug of QCPTextElement not respecting the configured text alignment flag (setTextFlags)
- Various documentation typos and improvements
Other:
- QCP Now requires C++11. However, Qt4.6 compatibility is maintained in the QCP 2.x release series
- QCPColorScale is now initialized with gpCold gradient preset, which prevents color maps turning black when linking them to a default-created color scale without explicitly setting a gradient
- QCPLegend::clearItems is now faster in case of many legend items (>1000)
- Modernized expressions and thereby avoided some warnings (e.g. nullptr and casts)
- Switched to foreach (Qt macro) where possible (in preparation for switch to range-based for (C++11), soonest at next major release)
- Work around Qt bug, drawing lines with pen width 1 as slow as with pen widths > 1 (polyfill instead of line algorithm, also on Normal-DPI), by using pen width 0 in such cases.
- Added QCP::Interaction flag iNone=0x000 to allow explicitly specifying no interaction (Avoids QFlags::zero, which was deprecated in Qt5.14)
- QCP is now compatible with defines QT_USE_QSTRINGBUILDER, QT_USE_FAST_CONCATENATION (Qt<4.8), QT_USE_FAST_OPERATOR_PLUS (Qt<4.8)
#### Version 2.0.1 released on 25.06.18 ####
Bugfixes:
- Default filling order of QCPLayoutGrid is now foColumnsFirst instead of foRowsFirst, as intended and consistent with QCP1.
Note that this also changes the indexing order of e.g. QCustomPlot::axisRect(int index), compared with 2.0.0. You can change
the filling and thus indexing order yourself by calling QCPLayoutGrid::setFillOrder.
- fixed bug in QCPColorMap, when using alpha in the gradient color stops. Used to draw falsely black data points when the associated data value is exactly
on the first or last color stop.
- QCPDataSelection::enforceType(stDataRange) would erroneously add an empty data range to the selection, if the selection was already empty.
This in turn would cause isEmpty() to erroneously return false.
- fixed hypothetical crash when selectTest is called on a QCPItemCurve which has all of its points at the same position
Other:
- Various documentation improvements and clarifications
- Prevent conflict with windows.h min/max macros if user forgets to define NOMINMAX
- compiling QCP shared libraries with static Qt is now easier
- added defines QCUSTOMPLOT_VERSION and QCUSTOMPLOT_VERSION_STR (the same way Qt does) to provide the used QCP version number
- added missing Q_DECL_OVERRIDE declarations, thus preventing warnings some compiler settings
- QCPAxisTicker and subclasses are no longer copyable by value, as intended
- QCPBarsGroup constructor is now explicit, as intended
- Qt 5.11 compatibility
#### Version 2.0.0 released on 04.09.17 ####
Added major features:
- Axis tick and tick label generation was completely refactored and is now handled in the QCPAxisTicker class (also see QCPAxis::setTicker). Available ticker subclasses for special uses cases:
QCPAxisTicker, QCPAxisTickerFixed, QCPAxisTickerLog, QCPAxisTickerPi, QCPAxisTickerTime, QCPAxisTickerDateTime, QCPAxisTickerText
- Data container is now based on QCPDataContainer template for unified data interface and significantly improved memory footprint and better performance for common use-cases, especially data adding/removing.
- New data selection mechanism allows selection of single data points and data ranges for plottables. See special documentation page "data selection mechanism".
- Rubber band/selection rect for data point selection and axis zooming is now available, see documentation of QCustomPlot::setSelectionRectMode and QCPSelectionRect. For this purpose, the new default
layer "overlay" was introduced, which is now the top layer, and holds the QCustomPlot's QCPSelectionRect instance.
- Data sharing between plottables of the same type (see setData methods taking a QSharedPointer)
- OpenGL hardware acceleration is now available across all Qt versions (including Qt4) in a unified, simple interface, with QCustomPlot::setOpenGl (experimental)
- QCPStatisticalBox can now display a series of statistical boxes instead of only a single one
- New QCPErrorBars plottable allows attaching error bars to any one-dimensional plottable (QCPGraph has thus lost its own error-bar capability)
- QCPColorMap now supports transparency via alpha in its color gradient stops, and via a dedicated cell-wise alpha map (see QCPColorMapData::setAlpha)
- Layers may now be individually replotted (QCPLayer::replot), if the mode (QCPLayer::setMode) is set to lmBuffered. Mutually adjacent lmLogical layers share a single paint buffer to save resources.
By default, the new topmost "overlay" layer which contains the selection rect is an lmBuffered layer. Updating the selection rect is thus very fast, independent of the plot contents.
- QCPLayerable (and thus practically all objects in QCP) now have virtual methods to receive mouse press/move/release/doubleclick/wheel events. Before, only QCPLayoutElement provided them.
this makes it much easier to subclass e.g. items and plottables to provide custom mouse interactions