qwtchangelog.3 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. .TH "qwtchangelog" 3 "Mon Dec 28 2020" "Version 6.1.6" "Qwt User's Guide" \" -*- nroff -*-
  2. .ad l
  3. .nh
  4. .SH NAME
  5. qwtchangelog \- What's new in Qwt 6\&.1
  6. .SH "New plot items"
  7. .PP
  8. .IP "\(bu" 2
  9. \fBQwtPlotBarChart\fP
  10. .br
  11. Bar chart, see 'examples/distrowatch'
  12. .IP "\(bu" 2
  13. \fBQwtPlotMultiBarChart\fP
  14. .br
  15. Chart of grouped bars - stacked or aligned side by side\&. See 'examples/barchart'
  16. .IP "\(bu" 2
  17. \fBQwtPlotTradingCurve\fP
  18. .br
  19. Candlestick or OHLC charts typically used to describe price movements over time\&. See 'examples/stockchart'
  20. .IP "\(bu" 2
  21. \fBQwtPlotShapeItem\fP
  22. .br
  23. 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'
  24. .IP "\(bu" 2
  25. \fBQwtPlotLegendItem\fP
  26. .br
  27. A legend on the plot canvas\&. See 'examples/legends'
  28. .IP "\(bu" 2
  29. \fBQwtPlotZoneItem\fP
  30. .br
  31. A horizontal or vertical section
  32. .IP "\(bu" 2
  33. \fBQwtPlotTextLabel\fP
  34. .br
  35. 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'\&.
  36. .PP
  37. .SH "Scales beyond linear and logarithmic transformations"
  38. .PP
  39. QwtScaleTransformation has been replaced by \fBQwtTransform\fP and its derived classes:
  40. .PP
  41. .IP "\(bu" 2
  42. \fBQwtTransform\fP
  43. .IP "\(bu" 2
  44. \fBQwtNullTransform\fP
  45. .IP "\(bu" 2
  46. \fBQwtLogTransform\fP
  47. .IP "\(bu" 2
  48. \fBQwtPowerTransform\fP
  49. .PP
  50. .PP
  51. Individual transformations ( f\&.e\&. different scaling for special sections ) can be implemented by overloading \fBQwtTransform\fP ( see playground/scaleengine )\&.
  52. .PP
  53. \fBQwtLinearScaleEngine\fP and \fBQwtLogScaleEngine\fP are not limited to base 10 anymore\&.
  54. .SS "Datetime scales"
  55. A set of a new classes for displaying datetime values:
  56. .PP
  57. .IP "\(bu" 2
  58. \fBQwtDate\fP
  59. .br
  60. A collection of methods to convert between QDateTime and doubles
  61. .IP "\(bu" 2
  62. \fBQwtDateScaleEngine\fP
  63. .br
  64. A scale engine that aligns and finds ticks in terms of datetime units\&.
  65. .IP "\(bu" 2
  66. \fBQwtDateScaleDraw\fP
  67. .br
  68. A scale draw mapping values to datetime strings\&.
  69. .PP
  70. .PP
  71. Scales for Qt::UTC and Qt::LocalTime are supported\&.
  72. .SH "Redesign of the dial and meter widgets"
  73. .PP
  74. Many parts of the class design of the dial and meter widgets were left over from the 90s ( Qwt 0\&.2, Qt 1\&.1 )\&.
  75. .PP
  76. The derivation tree is simpler and more logical:
  77. .PP
  78. .IP "\(bu" 2
  79. \fBQwtAbstractScale\fP is a QWidget
  80. .IP "\(bu" 2
  81. \fBQwtAbstractSlider\fP is a \fBQwtAbstractScale\fP\&. ( for sliders without scales QAbstractSlider should be the base class )
  82. .IP "\(bu" 2
  83. \fBQwtThermo\fP is also a \fBQwtAbstractScale\fP
  84. .IP "\(bu" 2
  85. \fBQwtDial\fP, \fBQwtKnob\fP, \fBQwtSlider\fP are derived from \fBQwtAbstractSlider\fP
  86. .IP "\(bu" 2
  87. \fBQwtCounter\fP is derived from QWidget
  88. .PP
  89. .PP
  90. QwtDoubleRange has been removed\&.
  91. .PP
  92. All classes use the terminology known from QAbstractSlider - as far as possible\&. The extended \fBsystem for scales\fP is completely supported\&.
  93. .SH "Basic support for an OpenGL plot canvas"
  94. .PP
  95. \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 )\&.
  96. .PP
  97. \fBQwtPlotGLCanvas\fP is in an experimental state and is not recommended for average use cases\&.
  98. .SH "A new system for plot legends"
  99. .PP
  100. \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\&.
  101. .PP
  102. \fBQwtPlotLegendItem\fP is a new plot item that displays a legend on the plot canvas\&.
  103. .PP
  104. The following examples demonstrate how to use the new system:
  105. .PP
  106. .IP "\(bu" 2
  107. examples/legends
  108. .br
  109. shows how to use the new legend system
  110. .IP "\(bu" 2
  111. examples/stockchart
  112. .br
  113. implementats a QTreeView with checkable items as legend
  114. .PP
  115. .SH "Off-screen paint device for vector graphics"
  116. .PP
  117. \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\&.
  118. .SH "QwtWidgetOverlay"
  119. .PP
  120. \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\&.
  121. .PP
  122. The following examples show how to use overlays:
  123. .PP
  124. .IP "\(bu" 2
  125. examples/itemeditor
  126. .IP "\(bu" 2
  127. examples/curvetracker
  128. .PP
  129. .PP
  130. \fBQwtPicker\fP ( -> \fBQwtPlotPicker\fP, \fBQwtPlotZoomer\fP ) internally uses \fBQwtWidgetOverlay\fP now, making it easier to implement individual rubber bands\&.
  131. .SH "QwtSymbol"
  132. .PP
  133. New symbol types have been introduced:
  134. .PP
  135. .IP "\(bu" 2
  136. \fBQwtSymbol::Path\fP
  137. .IP "\(bu" 2
  138. \fBQwtSymbol::Pixmap\fP
  139. .IP "\(bu" 2
  140. \fBQwtSymbol::Graphic\fP
  141. .IP "\(bu" 2
  142. \fBQwtSymbol::SvgDocument\fP
  143. .PP
  144. .PP
  145. \fBQwtSymbol\fP autodetect the most performant paint strategy for a paint device what is in most situations using a QPixmap cache\&.
  146. .PP
  147. \fBQwtSymbol::setPinPoint()\fP allows one to align the symbol individually, f\&.e to the position of the peak of an arrow\&.
  148. .SH "QwtPlotCurve"
  149. .PP
  150. 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\&.
  151. .PP
  152. New paint attributes:
  153. .PP
  154. .IP "\(bu" 2
  155. \fBQwtPlotCurve::FilterPoints\fP
  156. .IP "\(bu" 2
  157. \fBQwtPlotCurve::MinimizeMemory\fP
  158. .IP "\(bu" 2
  159. \fBQwtPlotCurve::ImageBuffer\fP
  160. .PP
  161. .PP
  162. QwtPlotCurve::CacheSymbols has been removed, as caching is implemented in \fBQwtSymbol\fP now\&.
  163. .br
  164. .PP
  165. \fBQwtPlotCurve::drawLines()\fP, \fBQwtPlotCurve::drawDots()\fP, \fBQwtPlotCurve::drawSteps()\fP and \fBQwtPlotCurve::drawSticks()\fP are virtual now\&.
  166. .SH "QwtPlot"
  167. .PP
  168. A footer similar to a title has been added\&.
  169. .PP
  170. 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\&.
  171. .PP
  172. To support using an OpenGL canvas \fBQwtPlot::setCanvas\fP has been added\&. This has 2 important implications for the application code:
  173. .PP
  174. .IP "\(bu" 2
  175. \fBQwtPlot::canvas()\fP returns QWidget and needs to be casted, when using methods of \fBQwtPlotCanvas\fP\&.
  176. .IP "\(bu" 2
  177. \fBQwtPlotCanvas\fP can be created and assigned in application code, what makes it possible to derive and overload methods\&.
  178. .PP
  179. .PP
  180. The initialization of a plot canvas with Qwt 6\&.1 will probably look like this:
  181. .PP
  182. .PP
  183. .nf
  184. QwtPlotCanvas* canvas = new QwtPlotCanvas();
  185. canvas->setXY( \&.\&.\&. );
  186. \&.\&.\&.
  187. plot->setCanvas( canvas );
  188. .fi
  189. .PP
  190. .PP
  191. To have a consistent API \fBQwtPlot::setPlotLayout()\fP has been added,
  192. .SH "Other"
  193. .PP
  194. .SS "QwtScaleDiv"
  195. The following methods have been added:
  196. .PP
  197. .IP "\(bu" 2
  198. \fBQwtScaleDiv::inverted()\fP
  199. .IP "\(bu" 2
  200. \fBQwtScaleDiv::bounded()\fP
  201. .IP "\(bu" 2
  202. \fBQwtScaleDiv::isEmpty()\fP
  203. .IP "\(bu" 2
  204. \fBQwtScaleDiv::isIncreasing()\fP
  205. .IP "\(bu" 2
  206. QDebug operator
  207. .PP
  208. .PP
  209. The following methods have been removed:
  210. .PP
  211. .IP "\(bu" 2
  212. QwtScaleDiv::isValid(), QwtScaleDiv::invalidate()
  213. .br
  214. The valid state was left over from early Qwt versions indicating a state of the autoscaler\&.
  215. .PP
  216. .SS "QwtScaleEngine"
  217. The following methods have been added:
  218. .PP
  219. .IP "\(bu" 2
  220. \fBQwtScaleEngine::setBase()\fP
  221. .IP "\(bu" 2
  222. \fBQwtScaleEngine::setTransformation()\fP
  223. .PP
  224. .SS "QwtPlotLayout"
  225. The following flags have been added:
  226. .PP
  227. .IP "\(bu" 2
  228. \fBQwtPlotLayout::IgnoreTitle\fP
  229. .IP "\(bu" 2
  230. \fBQwtPlotLayout::IgnoreFooter\fP
  231. .IP "\(bu" 2
  232. \fBQwtPlotLayout::setAlignCanvasToScale()\fP
  233. .PP
  234. .SS "QwtPlotCanvas"
  235. Rounded borders ( like with style sheets ) can configured using \fBQwtPlotCanvas::setBorderRadius()\fP;
  236. .SS "Other changes"
  237. .IP "\(bu" 2
  238. \fBQwtWeedingCurveFitter\fP
  239. .br
  240. \fBQwtWeedingCurveFitter::setChunkSize()\fP has been added, with drastic performance improvements for huge sets of points\&.
  241. .IP "\(bu" 2
  242. \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\&.
  243. .IP "\(bu" 2
  244. \fBQwtSystemClock\fP For Qt >= 4\&.9 \fBQwtSystemClock\fP uses QElapsedTimer internally\&. As it doesn't support a similar feature, QwtSystemClock::precision() has been removed\&.
  245. .IP "\(bu" 2
  246. QwtPlotAbstractSeriesItem
  247. .br
  248. QwtPlotAbstractSeriesItem has been split into \fBQwtPlotSeriesItem\fP and QwtPlotAbstractSeriesStore\&.
  249. .IP "\(bu" 2
  250. \fBQwtText\fP
  251. .br
  252. A metatype declaration has been added, so that \fBQwtText\fP can be used with QVariant\&.
  253. .IP "\(bu" 2
  254. \fBQwtEventPattern\fP, \fBQwtPanner\fP, \fBQwtMagnifier\fP
  255. .br
  256. Forgotten Qt3 leftovers have been fixed: int -> Qt::KeyboardModifiers
  257. .IP "\(bu" 2
  258. 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(),
  259. .IP "\(bu" 2
  260. qwtUpperSampleIndex()
  261. .br
  262. A binary search algorithm for sorted samples
  263. .IP "\(bu" 2
  264. \fBQwtMatrixRasterData\fP \fBQwtMatrixRasterData::setValue()\fP has been added
  265. .IP "\(bu" 2
  266. \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
  267. .IP "\(bu" 2
  268. \fBQwtPlotItem\fP \fBQwtPlotItem::ItemInterest\fP has been added\&. \fBQwtPlotItem::setRenderThreadCount()\fP was shifted from \fBQwtPlotRasterItem\fP\&.
  269. .IP "\(bu" 2
  270. \&.\&.\&.
  271. .PP
  272. .SH "Summary of the new classes"
  273. .PP
  274. .IP "\(bu" 2
  275. \fBQwtAbstractLegend\fP
  276. .IP "\(bu" 2
  277. \fBQwtDate\fP
  278. .IP "\(bu" 2
  279. \fBQwtDateScaleDraw\fP
  280. .IP "\(bu" 2
  281. \fBQwtDateScaleEngine\fP
  282. .IP "\(bu" 2
  283. \fBQwtGraphic\fP
  284. .IP "\(bu" 2
  285. \fBQwtLegendData\fP
  286. .IP "\(bu" 2
  287. \fBQwtLegendLabel\fP
  288. .IP "\(bu" 2
  289. \fBQwtPainterCommand\fP
  290. .IP "\(bu" 2
  291. \fBQwtPixelMatrix\fP
  292. .IP "\(bu" 2
  293. \fBQwtPlotAbstractBarChart\fP
  294. .IP "\(bu" 2
  295. \fBQwtPlotBarChart\fP
  296. .IP "\(bu" 2
  297. \fBQwtPlotMultiBarChart\fP
  298. .IP "\(bu" 2
  299. \fBQwtPlotGLCanvas\fP
  300. .IP "\(bu" 2
  301. \fBQwtPlotLegendItem\fP
  302. .IP "\(bu" 2
  303. \fBQwtPlotShapeItem\fP
  304. .IP "\(bu" 2
  305. \fBQwtPlotTextLabel\fP
  306. .IP "\(bu" 2
  307. \fBQwtPlotTradingCurve\fP
  308. .IP "\(bu" 2
  309. \fBQwtPlotZoneItem\fP
  310. .IP "\(bu" 2
  311. QwtPointData
  312. .IP "\(bu" 2
  313. \fBQwtPointMapper\fP
  314. .IP "\(bu" 2
  315. \fBQwtTransform\fP, \fBQwtNullTransform\fP, \fBQwtLogTransform\fP, \fBQwtPowerTransform\fP
  316. .IP "\(bu" 2
  317. \fBQwtWidgetOverlay\fP
  318. .PP