.TH "qwtchangelog" 3 "Wed Jan 2 2019" "Version 6.1.4" "Qwt User's Guide" \" -*- nroff -*- .ad l .nh .SH NAME qwtchangelog \- What's new in Qwt 6\&.1 .SH "New plot items" .PP .IP "\(bu" 2 \fBQwtPlotBarChart\fP .br Bar chart, see 'examples/distrowatch' .IP "\(bu" 2 \fBQwtPlotMultiBarChart\fP .br Chart of grouped bars - stacked or aligned side by side\&. See 'examples/barchart' .IP "\(bu" 2 \fBQwtPlotTradingCurve\fP .br Candlestick or OHLC charts typically used to describe price movements over time\&. See 'examples/stockchart' .IP "\(bu" 2 \fBQwtPlotShapeItem\fP .br A plot item to display rectangles, circles, polygons and all other type of shapes ( built from intersections or unifications ), that can be expressed by a QPainterPath\&. See 'examples/itemeditor' .IP "\(bu" 2 \fBQwtPlotLegendItem\fP .br A legend on the plot canvas\&. See 'examples/legends' .IP "\(bu" 2 \fBQwtPlotZoneItem\fP .br A horizontal or vertical section .IP "\(bu" 2 \fBQwtPlotTextLabel\fP .br In opposite to a \fBQwtPlotMarker\fP the text is not aligned to a plot coordinate but according to the geometry of the canvas ( f\&.e top/centered for a title )\&. See 'playground/curvetracker'\&. .PP .SH "Scales beyond linear and logarithmic transformations" .PP QwtScaleTransformation has been replaced by \fBQwtTransform\fP and its derived classes: .PP .IP "\(bu" 2 \fBQwtTransform\fP .IP "\(bu" 2 \fBQwtNullTransform\fP .IP "\(bu" 2 \fBQwtLogTransform\fP .IP "\(bu" 2 \fBQwtPowerTransform\fP .PP .PP Individual transformations ( f\&.e\&. different scaling for special sections ) can be implemented by overloading \fBQwtTransform\fP ( see playground/scaleengine )\&. .PP \fBQwtLinearScaleEngine\fP and \fBQwtLogScaleEngine\fP are not limited to base 10 anymore\&. .SS "Datetime scales" A set of a new classes for displaying datetime values: .PP .IP "\(bu" 2 \fBQwtDate\fP .br A collection of methods to convert between QDateTime and doubles .IP "\(bu" 2 \fBQwtDateScaleEngine\fP .br A scale engine that aligns and finds ticks in terms of datetime units\&. .IP "\(bu" 2 \fBQwtDateScaleDraw\fP .br A scale draw mapping values to datetime strings\&. .PP .PP Scales for Qt::UTC and Qt::LocalTime are supported\&. .SH "Redesign of the dial and meter widgets" .PP Many parts of the class design of the dial and meter widgets were left over from the 90s ( Qwt 0\&.2, Qt 1\&.1 )\&. .PP The derivation tree is simpler and more logical: .PP .IP "\(bu" 2 \fBQwtAbstractScale\fP is a QWidget .IP "\(bu" 2 \fBQwtAbstractSlider\fP is a \fBQwtAbstractScale\fP\&. ( for sliders without scales QAbstractSlider should be the base class ) .IP "\(bu" 2 \fBQwtThermo\fP is also a \fBQwtAbstractScale\fP .IP "\(bu" 2 \fBQwtDial\fP, \fBQwtKnob\fP, \fBQwtSlider\fP are derived from \fBQwtAbstractSlider\fP .IP "\(bu" 2 \fBQwtCounter\fP is derived from QWidget .PP .PP QwtDoubleRange has been removed\&. .PP All classes use the terminology known from QAbstractSlider - as far as possible\&. The extended \fBsystem for scales\fP is completely supported\&. .SH "Basic support for an OpenGL plot canvas" .PP \fBQwtPlotGLCanvas\fP offers the option to draw plot items using an OpenGL paint engine ( QPaintEngine::OpenGL/OpenGL2 ), This is not what could be implemented with native OpenGL, but it offers hardware acceleration in environments, where the raster paint engine is the only option\&. ( f\&.e Qt4/Windows, or Qt5 on all platforms )\&. .PP \fBQwtPlotGLCanvas\fP is in an experimental state and is not recommended for average use cases\&. .SH "A new system for plot legends" .PP \fBQwtLegend\fP has been decoupled from \fBQwtPlot\fP and can be replaced by application specific implementations\&. Plot items and the legend exchange the information using \fBQwtLegendData\fP\&. .PP \fBQwtPlotLegendItem\fP is a new plot item that displays a legend on the plot canvas\&. .PP The following examples demonstrate how to use the new system: .PP .IP "\(bu" 2 examples/legends .br shows how to use the new legend system .IP "\(bu" 2 examples/stockchart .br implementats a QTreeView with checkable items as legend .PP .SH "Off-screen paint device for vector graphics" .PP \fBQwtGraphic\fP can be copied like QImage or QPixmap but is scalable like QSvgGenerator\&. It is implemented as a record/replay paint device like QPicture\&. .SH "QwtWidgetOverlay" .PP \fBQwtWidgetOverlay\fP is a base class for implementing widget overlays - primarily used for use cases like graphical editors or running cursors for the plot canvas\&. .PP The following examples show how to use overlays: .PP .IP "\(bu" 2 examples/itemeditor .IP "\(bu" 2 examples/curvetracker .PP .PP \fBQwtPicker\fP ( -> \fBQwtPlotPicker\fP, \fBQwtPlotZoomer\fP ) internally uses \fBQwtWidgetOverlay\fP now, making it easier to implement individual rubber bands\&. .SH "QwtSymbol" .PP New symbol types have been introduced: .PP .IP "\(bu" 2 \fBQwtSymbol::Path\fP .IP "\(bu" 2 \fBQwtSymbol::Pixmap\fP .IP "\(bu" 2 \fBQwtSymbol::Graphic\fP .IP "\(bu" 2 \fBQwtSymbol::SvgDocument\fP .PP .PP \fBQwtSymbol\fP autodetect the most performant paint strategy for a paint device what is in most situations using a QPixmap cache\&. .PP \fBQwtSymbol::setPinPoint()\fP allows one to align the symbol individually, f\&.e to the position of the peak of an arrow\&. .SH "QwtPlotCurve" .PP Some optimizations that got lost with introducing the floating point based render code with Qwt 6\&.0 have been reenabled\&. Other specific optimizations have been added\&. .PP New paint attributes: .PP .IP "\(bu" 2 \fBQwtPlotCurve::FilterPoints\fP .IP "\(bu" 2 \fBQwtPlotCurve::MinimizeMemory\fP .IP "\(bu" 2 \fBQwtPlotCurve::ImageBuffer\fP .PP .PP QwtPlotCurve::CacheSymbols has been removed, as caching is implemented in \fBQwtSymbol\fP now\&. .br \fBQwtPlotCurve::drawLines()\fP, \fBQwtPlotCurve::drawDots()\fP, \fBQwtPlotCurve::drawSteps()\fP and \fBQwtPlotCurve::drawSticks()\fP are virtual now\&. .SH "QwtPlot" .PP A footer similar to a title has been added\&. .PP QwtPlot::ExternalLegend is obsolete with the new \fBsystem for legends\fP\&. The signals QwtPlot::legendClicked(), QwtPlot::legendChecked() have been removed\&. Applications need to connect to \fBQwtLegend::clicked()\fP and \fBQwtLegend::checked()\fP\&. .PP To support using an OpenGL canvas \fBQwtPlot::setCanvas\fP has been added\&. This has 2 important implications for the application code: .PP .IP "\(bu" 2 \fBQwtPlot::canvas()\fP returns QWidget and needs to be casted, when using methods of \fBQwtPlotCanvas\fP\&. .IP "\(bu" 2 \fBQwtPlotCanvas\fP can be created and assigned in application code, what makes it possible to derive and overload methods\&. .PP .PP The initialization of a plot canvas with Qwt 6\&.1 will probably look like this: .PP .PP .nf QwtPlotCanvas* canvas = new QwtPlotCanvas(); canvas->setXY( \&.\&.\&. ); \&.\&.\&. plot->setCanvas( canvas ); .fi .PP .PP To have a consistent API \fBQwtPlot::setPlotLayout()\fP has been added, .SH "Other" .PP .SS "QwtScaleDiv" The following methods have been added: .PP .IP "\(bu" 2 \fBQwtScaleDiv::inverted()\fP .IP "\(bu" 2 \fBQwtScaleDiv::bounded()\fP .IP "\(bu" 2 \fBQwtScaleDiv::isEmpty()\fP .IP "\(bu" 2 \fBQwtScaleDiv::isIncreasing()\fP .IP "\(bu" 2 QDebug operator .PP .PP The following methods have been removed: .PP .IP "\(bu" 2 QwtScaleDiv::isValid(), QwtScaleDiv::invalidate() .br The valid state was left over from early Qwt versions indicating a state of the autoscaler\&. .PP .SS "QwtScaleEngine" The following methods have been added: .PP .IP "\(bu" 2 \fBQwtScaleEngine::setBase()\fP .IP "\(bu" 2 \fBQwtScaleEngine::setTransformation()\fP .PP .SS "QwtPlotLayout" The following flags have been added: .PP .IP "\(bu" 2 \fBQwtPlotLayout::IgnoreTitle\fP .IP "\(bu" 2 \fBQwtPlotLayout::IgnoreFooter\fP .IP "\(bu" 2 \fBQwtPlotLayout::setAlignCanvasToScale()\fP .PP .SS "QwtPlotCanvas" Rounded borders ( like with style sheets ) can configured using \fBQwtPlotCanvas::setBorderRadius()\fP; .SS "Other changes" .IP "\(bu" 2 \fBQwtWeedingCurveFitter\fP .br \fBQwtWeedingCurveFitter::setChunkSize()\fP has been added, with drastic performance improvements for huge sets of points\&. .IP "\(bu" 2 \fBQwtPlotRenderer\fP The frame of the plot canvas can be rendered, what makes the result even closer to WYSWYG\&. \fBQwtPlotRenderer::exportTo()\fP has been added\&. .IP "\(bu" 2 \fBQwtSystemClock\fP For Qt >= 4\&.9 \fBQwtSystemClock\fP uses QElapsedTimer internally\&. As it doesn't support a similar feature, QwtSystemClock::precision() has been removed\&. .IP "\(bu" 2 QwtPlotAbstractSeriesItem .br QwtPlotAbstractSeriesItem has been split into \fBQwtPlotSeriesItem\fP and QwtPlotAbstractSeriesStore\&. .IP "\(bu" 2 \fBQwtText\fP .br A metatype declaration has been added, so that \fBQwtText\fP can be used with QVariant\&. .IP "\(bu" 2 \fBQwtEventPattern\fP, \fBQwtPanner\fP, \fBQwtMagnifier\fP .br Forgotten Qt3 leftovers have been fixed: int -> Qt::KeyboardModifiers .IP "\(bu" 2 QPen Qt5/Qt4 incompatibility The default pen width for Qt5 is 1, what makes it a non cosmetic\&. To hide this nasty incompatibility several setPen() methods have been added the build pens with a width 0\&. See QPen::isCosmetic(), .IP "\(bu" 2 qwtUpperSampleIndex() .br A binary search algorithm for sorted samples .IP "\(bu" 2 \fBQwtMatrixRasterData\fP \fBQwtMatrixRasterData::setValue()\fP has been added .IP "\(bu" 2 \fBQwtPicker\fP QwtPicker::rubberBandWidget(), QwtPicker::trackerWidget() have been replaced by \fBQwtPicker::rubberBandOverlay()\fP, \fBQwtPicker::trackerOverlay()\fP\&. \fBQwtPicker::rubberBandMask()\fP has been added\&. QwtPicker::pickRect() has been replaced by \fBQwtPicker::pickArea()\fP .IP "\(bu" 2 \fBQwtPlotItem\fP \fBQwtPlotItem::ItemInterest\fP has been added\&. \fBQwtPlotItem::setRenderThreadCount()\fP was shifted from \fBQwtPlotRasterItem\fP\&. .IP "\(bu" 2 \&.\&.\&. .PP .SH "Summary of the new classes" .PP .IP "\(bu" 2 \fBQwtAbstractLegend\fP .IP "\(bu" 2 \fBQwtDate\fP .IP "\(bu" 2 \fBQwtDateScaleDraw\fP .IP "\(bu" 2 \fBQwtDateScaleEngine\fP .IP "\(bu" 2 \fBQwtGraphic\fP .IP "\(bu" 2 \fBQwtLegendData\fP .IP "\(bu" 2 \fBQwtLegendLabel\fP .IP "\(bu" 2 \fBQwtPainterCommand\fP .IP "\(bu" 2 \fBQwtPixelMatrix\fP .IP "\(bu" 2 \fBQwtPlotAbstractBarChart\fP .IP "\(bu" 2 \fBQwtPlotBarChart\fP .IP "\(bu" 2 \fBQwtPlotMultiBarChart\fP .IP "\(bu" 2 \fBQwtPlotGLCanvas\fP .IP "\(bu" 2 \fBQwtPlotLegendItem\fP .IP "\(bu" 2 \fBQwtPlotShapeItem\fP .IP "\(bu" 2 \fBQwtPlotTextLabel\fP .IP "\(bu" 2 \fBQwtPlotTradingCurve\fP .IP "\(bu" 2 \fBQwtPlotZoneItem\fP .IP "\(bu" 2 QwtPointData .IP "\(bu" 2 \fBQwtPointMapper\fP .IP "\(bu" 2 \fBQwtTransform\fP, \fBQwtNullTransform\fP, \fBQwtLogTransform\fP, \fBQwtPowerTransform\fP .IP "\(bu" 2 \fBQwtWidgetOverlay\fP .PP