123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997 Josef Wilgen
- * Copyright (C) 2002 Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
- #ifndef QWT_PLOT_H
- #define QWT_PLOT_H
- #include "qwt_global.h"
- #include "qwt_text.h"
- #include "qwt_plot_dict.h"
- #include "qwt_scale_map.h"
- #include <qframe.h>
- class QwtPlotLayout;
- class QwtLegend;
- class QwtScaleWidget;
- class QwtScaleEngine;
- class QwtScaleDiv;
- class QwtScaleDraw;
- class QwtTextLabel;
- class QwtPlotCanvas;
- /*!
- \brief A 2-D plotting widget
- QwtPlot is a widget for plotting two-dimensional graphs.
- An unlimited number of plot items can be displayed on
- its canvas. Plot items might be curves (QwtPlotCurve), markers
- (QwtPlotMarker), the grid (QwtPlotGrid), or anything else derived
- from QwtPlotItem.
- A plot can have up to four axes, with each plot item attached to an x- and
- a y axis. The scales at the axes can be explicitely set (QwtScaleDiv), or
- are calculated from the plot items, using algorithms (QwtScaleEngine) which
- can be configured separately for each axis.
- \image html plot.png
- \par Example
- The following example shows (schematically) the most simple
- way to use QwtPlot. By default, only the left and bottom axes are
- visible and their scales are computed automatically.
- \verbatim
- #include <qwt_plot.h>
- #include <qwt_plot_curve.h>
- QwtPlot *myPlot = new QwtPlot("Two Curves", parent);
- // add curves
- QwtPlotCurve *curve1 = new QwtPlotCurve("Curve 1");
- QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2");
- // copy the data into the curves
- curve1->setData(...);
- curve2->setData(...);
- curve1->attach(myPlot);
- curve2->attach(myPlot);
- // finally, refresh the plot
- myPlot->replot();
- \endverbatim
- */
- class QWT_EXPORT QwtPlot: public QFrame, public QwtPlotDict
- {
- Q_OBJECT
- Q_PROPERTY( QString propertiesDocument
- READ grabProperties WRITE applyProperties )
- public:
- /*!
- Axis index
- - yLeft\n
- - yRight\n
- - xBottom\n
- - xTop\n
- */
- enum Axis
- {
- yLeft,
- yRight,
- xBottom,
- xTop,
- axisCnt
- };
- /*!
- Position of the legend, relative to the canvas.
- - LeftLegend\n
- The legend will be left from the yLeft axis.
- - RightLegend\n
- The legend will be right from the yLeft axis.
- - BottomLegend\n
- The legend will be right below the xBottom axis.
- - TopLegend\n
- The legend will be between xTop axis and the title.
- - ExternalLegend\n
- External means that only the content of the legend
- will be handled by QwtPlot, but not its geometry.
- This might be interesting if an application wants to
- have a legend in an external window ( or on the canvas ).
- \note In case of ExternalLegend, the legend is not
- handled by QwtPlotRenderer
- \sa insertLegend()
- */
- enum LegendPosition
- {
- LeftLegend,
- RightLegend,
- BottomLegend,
- TopLegend,
- ExternalLegend
- };
- explicit QwtPlot( QWidget * = NULL );
- explicit QwtPlot( const QwtText &title, QWidget *p = NULL );
- virtual ~QwtPlot();
- void applyProperties( const QString & );
- QString grabProperties() const;
- void setAutoReplot( bool tf = true );
- bool autoReplot() const;
- // Layout
- QwtPlotLayout *plotLayout();
- const QwtPlotLayout *plotLayout() const;
- void setMargin( int margin );
- int margin() const;
- // Title
- void setTitle( const QString & );
- void setTitle( const QwtText &t );
- QwtText title() const;
- QwtTextLabel *titleLabel();
- const QwtTextLabel *titleLabel() const;
- // Canvas
- QwtPlotCanvas *canvas();
- const QwtPlotCanvas *canvas() const;
- void setCanvasBackground ( const QColor &c );
- const QColor& canvasBackground() const;
- void setCanvasLineWidth( int w );
- int canvasLineWidth() const;
- virtual QwtScaleMap canvasMap( int axisId ) const;
- double invTransform( int axisId, int pos ) const;
- double transform( int axisId, double value ) const;
- // Axes
- QwtScaleEngine *axisScaleEngine( int axisId );
- const QwtScaleEngine *axisScaleEngine( int axisId ) const;
- void setAxisScaleEngine( int axisId, QwtScaleEngine * );
- void setAxisAutoScale( int axisId );
- bool axisAutoScale( int axisId ) const;
- void enableAxis( int axisId, bool tf = true );
- bool axisEnabled( int axisId ) const;
- void setAxisFont( int axisId, const QFont &f );
- QFont axisFont( int axisId ) const;
- void setAxisScale( int axisId, double min, double max, double step = 0 );
- void setAxisScaleDiv( int axisId, const QwtScaleDiv & );
- void setAxisScaleDraw( int axisId, QwtScaleDraw * );
- double axisStepSize( int axisId ) const;
- const QwtScaleDiv *axisScaleDiv( int axisId ) const;
- QwtScaleDiv *axisScaleDiv( int axisId );
- const QwtScaleDraw *axisScaleDraw( int axisId ) const;
- QwtScaleDraw *axisScaleDraw( int axisId );
- const QwtScaleWidget *axisWidget( int axisId ) const;
- QwtScaleWidget *axisWidget( int axisId );
- void setAxisLabelAlignment( int axisId, Qt::Alignment );
- void setAxisLabelRotation( int axisId, double rotation );
- void setAxisTitle( int axisId, const QString & );
- void setAxisTitle( int axisId, const QwtText & );
- QwtText axisTitle( int axisId ) const;
- void setAxisMaxMinor( int axisId, int maxMinor );
- int axisMaxMinor( int axisId ) const;
- void setAxisMaxMajor( int axisId, int maxMajor );
- int axisMaxMajor( int axisId ) const;
- // Legend
- void insertLegend( QwtLegend *, LegendPosition = QwtPlot::RightLegend,
- double ratio = -1.0 );
- QwtLegend *legend();
- const QwtLegend *legend() const;
- // Misc
- virtual void polish();
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
- virtual void updateLayout();
- virtual void drawCanvas( QPainter * );
- void updateAxes();
- virtual bool event( QEvent * );
- virtual void drawItems( QPainter *, const QRectF &,
- const QwtScaleMap maps[axisCnt] ) const;
- Q_SIGNALS:
- /*!
- A signal which is emitted when the user has clicked on
- a legend item, which is in QwtLegend::ClickableItem mode.
- \param plotItem Corresponding plot item of the
- selected legend item
- \note clicks are disabled as default
- \sa QwtLegend::setItemMode(), QwtLegend::itemMode()
- */
- void legendClicked( QwtPlotItem *plotItem );
- /*!
- A signal which is emitted when the user has clicked on
- a legend item, which is in QwtLegend::CheckableItem mode
- \param plotItem Corresponding plot item of the
- selected legend item
- \param on True when the legen item is checked
- \note clicks are disabled as default
- \sa QwtLegend::setItemMode(), QwtLegend::itemMode()
- */
- void legendChecked( QwtPlotItem *plotItem, bool on );
- public Q_SLOTS:
- virtual void replot();
- void autoRefresh();
- protected Q_SLOTS:
- virtual void legendItemClicked();
- virtual void legendItemChecked( bool );
- protected:
- static bool axisValid( int axisId );
- virtual void updateTabOrder();
- virtual void resizeEvent( QResizeEvent *e );
- private:
- void initAxesData();
- void deleteAxesData();
- void updateScaleDiv();
- void initPlot( const QwtText &title );
- class AxisData;
- AxisData *d_axisData[axisCnt];
- class PrivateData;
- PrivateData *d_data;
- };
- #endif
|