123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- .TH "qwtchangelog" 3 "Mon Dec 28 2020" "Version 6.1.6" "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
- .PP
- \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
|