Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***************************************************************************
- ** **
- ** QCustomPlot, a simple to use, modern plotting widget for Qt **
- ** Copyright (C) 2012 Emanuel Eichhammer **
- ** **
- ** This program is free software: you can redistribute it and/or modify **
- ** it under the terms of the GNU General Public License as published by **
- ** the Free Software Foundation, either version 3 of the License, or **
- ** (at your option) any later version. **
- ** **
- ** This program is distributed in the hope that it will be useful, **
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of **
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
- ** GNU General Public License for more details. **
- ** **
- ** You should have received a copy of the GNU General Public License **
- ** along with this program. If not, see http://www.gnu.org/licenses/. **
- ** **
- ****************************************************************************
- ** Author: Emanuel Eichhammer **
- ** Website/Contact: http://www.WorksLikeClockwork.com/ **
- ** Date: 09.06.12 **
- ****************************************************************************/
- /*! \file */
- #ifndef QCUSTOMPLOT_H
- #define QCUSTOMPLOT_H
- #include <QObject>
- #include <QWidget>
- #include <QPainter>
- #include <QPaintEvent>
- #include <QPixmap>
- #include <QVector>
- #include <QString>
- #include <QPrinter>
- #include <QDateTime>
- #include <QMultiMap>
- #include <QFlags>
- #include <QDebug>
- #include <QVector2D>
- #include <QStack>
- #include <qmath.h>
- #include <limits>
- // decl definitions for shared library compilation/usage:
- #if defined(QCUSTOMPLOT_COMPILE_LIBRARY)
- # define QCP_LIB_DECL Q_DECL_EXPORT
- #elif defined(QCUSTOMPLOT_USE_LIBRARY)
- # define QCP_LIB_DECL Q_DECL_IMPORT
- #else
- # define QCP_LIB_DECL
- #endif
- class QCustomPlot;
- class QCPLegend;
- class QCPRange;
- class QCPLayerable;
- class QCPAbstractItem;
- class QCPItemPosition;
- class QCPAxis;
- class QCPData;
- /*!
- The QCP Namespace contains general enums and QFlags
- */
- namespace QCP
- {
- /*!
- Defines the symbol used for scatter points.
- On plottables/items that draw scatters, the sizes of these visualizations (with exception of \ref
- QCP::ssDot and \ref QCP::ssPixmap) can be controlled with a \a setScatterSize function. Scatters
- are in general drawn with the main pen set on the plottable/item.
- \see QCPGraph::setScatterStyle, QCPStatisticalBox::setOutlierStyle
- */
- enum ScatterStyle { ssNone ///< no scatter symbols are drawn (e.g. in QCPGraph, data only represented with lines)
- ,ssDot ///< a single pixel
- ,ssCross ///< a cross (x)
- ,ssPlus ///< a plus (+)
- ,ssCircle ///< a circle which is not filled
- ,ssDisc ///< a circle which is filled with the color of the pen (not the brush!)
- ,ssSquare ///< a square which is not filled
- ,ssDiamond ///< a diamond which is not filled
- ,ssStar ///< a star with eight arms, i.e. a combination of cross and plus
- ,ssTriangle ///< an equilateral triangle which is not filled, standing on baseline
- ,ssTriangleInverted ///< an equilateral triangle which is not filled, standing on corner
- ,ssCrossSquare ///< a square which is not filled, with a cross inside
- ,ssPlusSquare ///< a square which is not filled, with a plus inside
- ,ssCrossCircle ///< a circle which is not filled, with a cross inside
- ,ssPlusCircle ///< a circle which is not filled, with a plus inside
- ,ssPeace ///< a circle which is not filled, with one vertical and two downward diagonal lines
- ,ssPixmap ///< a custom pixmap specified by setScatterPixmap, centered on the data point coordinates
- };
- /*!
- Defines what elements of a plot can be forcibly drawn antialiased/not antialiased. If an
- element is neither forcibly drawn antialiased nor forcibly drawn not antialiased, it is up to
- the respective element how it is drawn. Typically it provides a \a setAntialiased function for
- this.
- \c AntialiasedElements is a flag of or-combined elements of this enum type.
- \see QCustomPlot::setAntialiasedElements, QCustomPlot::setNotAntialiasedElements
- */
- enum AntialiasedElement { aeAxes = 0x0001 ///< <tt>0x0001</tt> Axis base line and tick marks
- ,aeGrid = 0x0002 ///< <tt>0x0002</tt> Grid lines
- ,aeSubGrid = 0x0004 ///< <tt>0x0004</tt> Sub grid lines
- ,aeLegend = 0x0008 ///< <tt>0x0008</tt> Legend box
- ,aeLegendItems = 0x0010 ///< <tt>0x0010</tt> Legend items
- ,aePlottables = 0x0020 ///< <tt>0x0020</tt> Main lines of plottables (excluding error bars, see element \ref aeErrorBars)
- ,aeItems = 0x0040 ///< <tt>0x0040</tt> Main lines of items
- ,aeScatters = 0x0080 ///< <tt>0x0080</tt> Scatter symbols of plottables (excluding scatter symbols of type ssPixmap)
- ,aeErrorBars = 0x0100 ///< <tt>0x0100</tt> Error bars
- ,aeFills = 0x0200 ///< <tt>0x0200</tt> Borders of fills (e.g. under or between graphs)
- ,aeZeroLine = 0x0400 ///< <tt>0x0400</tt> Zero-lines, see \ref QCPAxis::setZeroLinePen
- ,aeAll = 0xFFFF ///< <tt>0xFFFF</tt> All elements
- ,aeNone = 0x0000 ///< <tt>0x0000</tt> No elements
- };
- Q_DECLARE_FLAGS(AntialiasedElements, AntialiasedElement)
- /*!
- Defines plotting hints that control various aspects of the quality and speed of plotting.
- \see QCustomPlot::setPlottingHints
- */
- enum PlottingHint { phNone = 0x000 ///< <tt>0x000</tt> No hints are set
- ,phFastPolylines = 0x001 ///< <tt>0x001</tt> Graph/Curve lines are drawn with a faster method. This reduces the quality
- ///< especially of the line segment joins. (Only used for solid line pens.)
- ,phForceRepaint = 0x002 ///< <tt>0x002</tt> causes an immediate repaint() instead of a soft update() when QCustomPlot::replot() is called. This is set by default
- ///< on Windows-Systems to prevent the plot from freezing on fast consecutive replots (e.g. user drags ranges with mouse).
- };
- Q_DECLARE_FLAGS(PlottingHints, PlottingHint)
- }
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::AntialiasedElements)
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::PlottingHints)
- class QCP_LIB_DECL QCPData
- {
- public:
- QCPData();
- QCPData(double key, double value);
- double key, value;
- double keyErrorPlus, keyErrorMinus;
- double valueErrorPlus, valueErrorMinus;
- };
- Q_DECLARE_TYPEINFO(QCPData, Q_MOVABLE_TYPE);
- /*! \typedef QCPDataMap
- Container for storing QCPData items in a sorted fashion. The key of the map
- is the key member of the QCPData instance.
- This is the container in which QCPGraph holds its data.
- \see QCPData, QCPGraph::setData
- */
- typedef QMap<double, QCPData> QCPDataMap;
- typedef QMapIterator<double, QCPData> QCPDataMapIterator;
- typedef QMutableMapIterator<double, QCPData> QCPDataMutableMapIterator;
- class QCP_LIB_DECL QCPCurveData
- {
- public:
- QCPCurveData();
- QCPCurveData(double t, double key, double value);
- double t, key, value;
- };
- Q_DECLARE_TYPEINFO(QCPCurveData, Q_MOVABLE_TYPE);
- /*! \typedef QCPCurveDataMap
- Container for storing QCPCurveData items in a sorted fashion. The key of the map
- is the t member of the QCPCurveData instance.
- This is the container in which QCPCurve holds its data.
- \see QCPCurveData, QCPCurve::setData
- */
- typedef QMap<double, QCPCurveData> QCPCurveDataMap;
- typedef QMapIterator<double, QCPCurveData> QCPCurveDataMapIterator;
- typedef QMutableMapIterator<double, QCPCurveData> QCPCurveDataMutableMapIterator;
- class QCP_LIB_DECL QCPBarData
- {
- public:
- QCPBarData();
- QCPBarData(double key, double value);
- double key, value;
- };
- Q_DECLARE_TYPEINFO(QCPBarData, Q_MOVABLE_TYPE);
- /*! \typedef QCPBarDataMap
- Container for storing QCPBarData items in a sorted fashion. The key of the map
- is the key member of the QCPBarData instance.
- This is the container in which QCPBars holds its data.
- \see QCPBarData, QCPBars::setData
- */
- typedef QMap<double, QCPBarData> QCPBarDataMap;
- typedef QMapIterator<double, QCPBarData> QCPBarDataMapIterator;
- typedef QMutableMapIterator<double, QCPBarData> QCPBarDataMutableMapIterator;
- class QCP_LIB_DECL QCPPainter : public QPainter
- {
- public:
- QCPPainter();
- QCPPainter(QPaintDevice *device);
- ~QCPPainter();
- // getters:
- QPixmap scatterPixmap() const { return mScatterPixmap; }
- bool antialiasing() const { return testRenderHint(QPainter::Antialiasing); }
- bool pdfExportMode() const { return mPdfExportMode; }
- bool scaledExportMode() const { return mScaledExportMode; }
- // setters:
- void setScatterPixmap(const QPixmap pm);
- void setAntialiasing(bool enabled);
- void setPdfExportMode(bool enabled);
- void setScaledExportMode(bool enabled);
- // methods hiding non-virtual base class functions (QPainter bug workarounds):
- void setPen(const QPen &pen);
- void setPen(const QColor &color);
- void setPen(Qt::PenStyle penStyle);
- void drawLine(const QLineF &line);
- void drawLine(const QPointF &p1, const QPointF &p2) {drawLine(QLineF(p1, p2));}
- void save();
- void restore();
- // helpers:
- void fixScaledPen();
- void drawScatter(double x, double y, double size, QCP::ScatterStyle style);
- protected:
- QPixmap mScatterPixmap;
- bool mScaledExportMode;
- bool mPdfExportMode;
- bool mIsAntialiasing;
- QStack<bool> mAntialiasingStack;
- };
- class QCP_LIB_DECL QCPLineEnding
- {
- public:
- /*!
- Defines the type of ending decoration for line-like items, e.g. an arrow.
- \image html QCPLineEnding.png
- The width and length of these decorations can be controlled with the functions \ref setWidth
- and \ref setLength. Some decorations like \ref esDisc, \ref esSquare, \ref esDiamond and \ref esBar only
- support a width, the length property is ignored.
- \see QCPItemLine::setHead, QCPItemLine::setTail, QCPItemCurve::setHead, QCPItemCurve::setTail
- */
- enum EndingStyle { esNone ///< No ending decoration
- ,esFlatArrow ///< A filled arrow head with a straight/flat back (a triangle)
- ,esSpikeArrow ///< A filled arrow head with an indented back
- ,esLineArrow ///< A non-filled arrow head with open back
- ,esDisc ///< A filled circle
- ,esSquare ///< A filled square
- ,esDiamond ///< A filled diamond (45° rotated square)
- ,esBar ///< A bar perpendicular to the line
- };
- QCPLineEnding();
- QCPLineEnding(EndingStyle style, double width=8, double length=10, bool inverted=false);
- // getters:
- EndingStyle style() const { return mStyle; }
- double width() const { return mWidth; }
- double length() const { return mLength; }
- bool inverted() const { return mInverted; }
- // setters:
- void setStyle(EndingStyle style);
- void setWidth(double width);
- void setLength(double length);
- void setInverted(bool inverted);
- // non-property methods:
- double boundingDistance() const;
- void draw(QCPPainter *painter, const QVector2D &pos, const QVector2D &dir) const;
- void draw(QCPPainter *painter, const QVector2D &pos, double angle) const;
- protected:
- EndingStyle mStyle;
- double mWidth, mLength;
- bool mInverted;
- };
- Q_DECLARE_TYPEINFO(QCPLineEnding, Q_MOVABLE_TYPE);
- class QCP_LIB_DECL QCPLayer
- {
- public:
- QCPLayer(QCustomPlot* parentPlot, const QString &layerName);
- ~QCPLayer();
- // getters:
- QCustomPlot *parentPlot() const { return mParentPlot; }
- QString name() const { return mName; }
- int index() const;
- QList<QCPLayerable*> children() const { return mChildren; }
- protected:
- QCustomPlot *mParentPlot;
- QString mName;
- QList<QCPLayerable*> mChildren;
- void addChild(QCPLayerable *layerable, bool prepend);
- void removeChild(QCPLayerable *layerable);
- private:
- Q_DISABLE_COPY(QCPLayer)
- friend class QCPLayerable;
- };
- class QCP_LIB_DECL QCPLayerable : public QObject
- {
- Q_OBJECT
- public:
- QCPLayerable(QCustomPlot *parentPlot);
- ~QCPLayerable();
- // getters:
- bool visible() const { return mVisible; }
- QCustomPlot *parentPlot() const { return mParentPlot; }
- QCPLayer *layer() const { return mLayer; }
- bool antialiased() const { return mAntialiased; }
- // setters:
- void setVisible(bool on);
- bool setLayer(QCPLayer *layer);
- bool setLayer(const QString &layerName);
- void setAntialiased(bool enabled);
- protected:
- bool mVisible;
- QCustomPlot *mParentPlot;
- QCPLayer *mLayer;
- bool mAntialiased;
- // non-property methods:
- bool moveToLayer(QCPLayer *layer, bool prepend);
- void applyAntialiasingHint(QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const = 0;
- virtual QRect clipRect() const;
- virtual void draw(QCPPainter *painter) = 0;
- private:
- Q_DISABLE_COPY(QCPLayerable)
- friend class QCustomPlot;
- };
- class QCP_LIB_DECL QCPAbstractPlottable : public QCPLayerable
- {
- Q_OBJECT
- public:
- QCPAbstractPlottable(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPAbstractPlottable() {}
- // getters:
- QString name() const { return mName; }
- bool antialiasedFill() const { return mAntialiasedFill; }
- bool antialiasedScatters() const { return mAntialiasedScatters; }
- bool antialiasedErrorBars() const { return mAntialiasedErrorBars; }
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- QCPAxis *keyAxis() const { return mKeyAxis; }
- QCPAxis *valueAxis() const { return mValueAxis; }
- bool selectable() const { return mSelectable; }
- bool selected() const { return mSelected; }
- // setters:
- void setName(const QString &name);
- void setAntialiasedFill(bool enabled);
- void setAntialiasedScatters(bool enabled);
- void setAntialiasedErrorBars(bool enabled);
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- void setKeyAxis(QCPAxis *axis);
- void setValueAxis(QCPAxis *axis);
- void setSelectable(bool selectable);
- void setSelected(bool selected);
- // non-property methods:
- void rescaleAxes(bool onlyEnlarge=false) const;
- void rescaleKeyAxis(bool onlyEnlarge=false) const;
- void rescaleValueAxis(bool onlyEnlarge=false) const;
- virtual void clearData() = 0;
- virtual double selectTest(const QPointF &pos) const = 0;
- virtual bool addToLegend();
- virtual bool removeFromLegend() const;
- signals:
- void selectionChanged(bool selected);
- protected:
- /*!
- Represents negative and positive sign domain for passing to \ref getKeyRange and \ref getValueRange.
- */
- enum SignDomain { sdNegative ///< The negative sign domain, i.e. numbers smaller than zero
- ,sdBoth ///< Both sign domains, including zero, i.e. all (rational) numbers
- ,sdPositive ///< The positive sign domain, i.e. numbers greater than zero
- };
- QString mName;
- bool mAntialiasedFill, mAntialiasedScatters, mAntialiasedErrorBars;
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- QCPAxis *mKeyAxis, *mValueAxis;
- bool mSelected, mSelectable;
- virtual QRect clipRect() const;
- virtual void draw(QCPPainter *painter) = 0;
- virtual void drawLegendIcon(QCPPainter *painter, const QRect &rect) const = 0;
- virtual QCPRange getKeyRange(bool &validRange, SignDomain inSignDomain=sdBoth) const = 0;
- virtual QCPRange getValueRange(bool &validRange, SignDomain inSignDomain=sdBoth) const = 0;
- // painting and coordinate transformation helpers:
- void coordsToPixels(double key, double value, double &x, double &y) const;
- const QPointF coordsToPixels(double key, double value) const;
- void pixelsToCoords(double x, double y, double &key, double &value) const;
- void pixelsToCoords(const QPointF &pixelPos, double &key, double &value) const;
- QPen mainPen() const;
- QBrush mainBrush() const;
- void applyDefaultAntialiasingHint(QCPPainter *painter) const;
- void applyFillAntialiasingHint(QCPPainter *painter) const;
- void applyScattersAntialiasingHint(QCPPainter *painter) const;
- void applyErrorBarsAntialiasingHint(QCPPainter *painter) const;
- // selection test helpers:
- double distSqrToLine(const QPointF &start, const QPointF &end, const QPointF &point) const;
- private:
- Q_DISABLE_COPY(QCPAbstractPlottable)
- friend class QCustomPlot;
- friend class QCPPlottableLegendItem;
- };
- class QCP_LIB_DECL QCPGraph : public QCPAbstractPlottable
- {
- Q_OBJECT
- public:
- /*!
- Defines how the graph's line is represented visually in the plot. The line is drawn with the
- current pen of the graph (\ref setPen).
- \see setLineStyle
- */
- enum LineStyle { lsNone ///< data points are not connected with any lines (e.g. data only represented
- ///< with symbols according to the scatter style, see \ref setScatterStyle)
- ,lsLine ///< data points are connected by a straight line
- ,lsStepLeft ///< line is drawn as steps where the step height is the value of the left data point
- ,lsStepRight ///< line is drawn as steps where the step height is the value of the right data point
- ,lsStepCenter ///< line is drawn as steps where the step is in between two data points
- ,lsImpulse ///< each data point is represented by a line parallel to the value axis, which reaches from the data point to the zero-value-line
- };
- Q_ENUMS(LineStyle)
- /*!
- Defines what kind of error bars are drawn for each data point
- */
- enum ErrorType { etNone ///< No error bars are shown
- ,etKey ///< Error bars for the key dimension of the data point are shown
- ,etValue ///< Error bars for the value dimension of the data point are shown
- ,etBoth ///< Error bars for both key and value dimensions of the data point are shown
- };
- Q_ENUMS(ErrorType)
- explicit QCPGraph(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPGraph();
- // getters:
- const QCPDataMap *data() const { return mData; }
- LineStyle lineStyle() const { return mLineStyle; }
- QCP::ScatterStyle scatterStyle() const { return mScatterStyle; }
- double scatterSize() const { return mScatterSize; }
- const QPixmap scatterPixmap() const { return mScatterPixmap; }
- ErrorType errorType() const { return mErrorType; }
- QPen errorPen() const { return mErrorPen; }
- double errorBarSize() const { return mErrorBarSize; }
- bool errorBarSkipSymbol() const { return mErrorBarSkipSymbol; }
- QCPGraph *channelFillGraph() const { return mChannelFillGraph; }
- // setters:
- void setData(QCPDataMap *data, bool copy=false);
- void setData(const QVector<double> &key, const QVector<double> &value);
- void setDataKeyError(const QVector<double> &key, const QVector<double> &value, const QVector<double> &keyError);
- void setDataKeyError(const QVector<double> &key, const QVector<double> &value, const QVector<double> &keyErrorMinus, const QVector<double> &keyErrorPlus);
- void setDataValueError(const QVector<double> &key, const QVector<double> &value, const QVector<double> &valueError);
- void setDataValueError(const QVector<double> &key, const QVector<double> &value, const QVector<double> &valueErrorMinus, const QVector<double> &valueErrorPlus);
- void setDataBothError(const QVector<double> &key, const QVector<double> &value, const QVector<double> &keyError, const QVector<double> &valueError);
- void setDataBothError(const QVector<double> &key, const QVector<double> &value, const QVector<double> &keyErrorMinus, const QVector<double> &keyErrorPlus, const QVector<double> &valueErrorMinus, const QVector<double> &valueErrorPlus);
- void setLineStyle(LineStyle ls);
- void setScatterStyle(QCP::ScatterStyle ss);
- void setScatterSize(double size);
- void setScatterPixmap(const QPixmap &pixmap);
- void setErrorType(ErrorType errorType);
- void setErrorPen(const QPen &pen);
- void setErrorBarSize(double size);
- void setErrorBarSkipSymbol(bool enabled);
- void setChannelFillGraph(QCPGraph *targetGraph);
- // non-property methods:
- void addData(const QCPDataMap &dataMap);
- void addData(const QCPData &data);
- void addData(double key, double value);
- void addData(const QVector<double> &keys, const QVector<double> &values);
- void removeDataBefore(double key);
- void removeDataAfter(double key);
- void removeData(double fromKey, double toKey);
- void removeData(double key);
- virtual void clearData();
- virtual double selectTest(const QPointF &pos) const;
- using QCPAbstractPlottable::rescaleAxes;
- using QCPAbstractPlottable::rescaleKeyAxis;
- using QCPAbstractPlottable::rescaleValueAxis;
- virtual void rescaleAxes(bool onlyEnlarge, bool includeErrorBars) const; // overloads base class interface
- virtual void rescaleKeyAxis(bool onlyEnlarge, bool includeErrorBars) const; // overloads base class interface
- virtual void rescaleValueAxis(bool onlyEnlarge, bool includeErrorBars) const; // overloads base class interface
- protected:
- QCPDataMap *mData;
- QPen mErrorPen;
- LineStyle mLineStyle;
- QCP::ScatterStyle mScatterStyle;
- double mScatterSize;
- QPixmap mScatterPixmap;
- ErrorType mErrorType;
- double mErrorBarSize;
- bool mErrorBarSkipSymbol;
- QCPGraph *mChannelFillGraph;
- virtual void draw(QCPPainter *painter);
- virtual void drawLegendIcon(QCPPainter *painter, const QRect &rect) const;
- // functions to generate plot data points in pixel coordinates:
- void getPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData) const;
- // plot style specific functions to generate plot data, used by getPlotData:
- void getScatterPlotData(QVector<QCPData> *pointData) const;
- void getLinePlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData) const;
- void getStepLeftPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData) const;
- void getStepRightPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData) const;
- void getStepCenterPlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData) const;
- void getImpulsePlotData(QVector<QPointF> *lineData, QVector<QCPData> *pointData) const;
- // helper functions for drawing:
- void drawFill(QCPPainter *painter, QVector<QPointF> *lineData) const;
- void drawScatterPlot(QCPPainter *painter, QVector<QCPData> *pointData) const;
- void drawLinePlot(QCPPainter *painter, QVector<QPointF> *lineData) const;
- void drawImpulsePlot(QCPPainter *painter, QVector<QPointF> *lineData) const;
- void drawError(QCPPainter *painter, double x, double y, const QCPData &data) const;
- // helper functions:
- void getVisibleDataBounds(QCPDataMap::const_iterator &lower, QCPDataMap::const_iterator &upper, int &count) const;
- void addFillBasePoints(QVector<QPointF> *lineData) const;
- void removeFillBasePoints(QVector<QPointF> *lineData) const;
- QPointF lowerFillBasePoint(double lowerKey) const;
- QPointF upperFillBasePoint(double upperKey) const;
- const QPolygonF getChannelFillPolygon(const QVector<QPointF> *lineData) const;
- int findIndexBelowX(const QVector<QPointF> *data, double x) const;
- int findIndexAboveX(const QVector<QPointF> *data, double x) const;
- int findIndexBelowY(const QVector<QPointF> *data, double y) const;
- int findIndexAboveY(const QVector<QPointF> *data, double y) const;
- double pointDistance(const QPointF &pixelPoint) const;
- virtual QCPRange getKeyRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- virtual QCPRange getValueRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- virtual QCPRange getKeyRange(bool &validRange, SignDomain inSignDomain, bool includeErrors) const; // overloads base class interface
- virtual QCPRange getValueRange(bool &validRange, SignDomain inSignDomain, bool includeErrors) const; // overloads base class interface
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPCurve : public QCPAbstractPlottable
- {
- Q_OBJECT
- public:
- /*!
- Defines how the curve's line is represented visually in the plot. The line is drawn with the
- current pen of the curve (\ref setPen).
- \see setLineStyle
- */
- enum LineStyle { lsNone, ///< No line is drawn between data points (e.g. only scatters)
- lsLine ///< Data points are connected with a straight line
- };
- explicit QCPCurve(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPCurve();
- // getters:
- const QCPCurveDataMap *data() const { return mData; }
- QCP::ScatterStyle scatterStyle() const { return mScatterStyle; }
- double scatterSize() const { return mScatterSize; }
- QPixmap scatterPixmap() const { return mScatterPixmap; }
- LineStyle lineStyle() const { return mLineStyle; }
- // setters:
- void setData(QCPCurveDataMap *data, bool copy=false);
- void setData(const QVector<double> &t, const QVector<double> &key, const QVector<double> &value);
- void setData(const QVector<double> &key, const QVector<double> &value);
- void setScatterStyle(QCP::ScatterStyle style);
- void setScatterSize(double size);
- void setScatterPixmap(const QPixmap &pixmap);
- void setLineStyle(LineStyle style);
- // non-property methods:
- void addData(const QCPCurveDataMap &dataMap);
- void addData(const QCPCurveData &data);
- void addData(double t, double key, double value);
- void addData(double key, double value);
- void addData(const QVector<double> &ts, const QVector<double> &keys, const QVector<double> &values);
- void removeDataBefore(double t);
- void removeDataAfter(double t);
- void removeData(double fromt, double tot);
- void removeData(double t);
- virtual void clearData();
- virtual double selectTest(const QPointF &pos) const;
- protected:
- QCPCurveDataMap *mData;
- QCP::ScatterStyle mScatterStyle;
- double mScatterSize;
- QPixmap mScatterPixmap;
- LineStyle mLineStyle;
- virtual void draw(QCPPainter *painter);
- virtual void drawLegendIcon(QCPPainter *painter, const QRect &rect) const;
- // drawing helpers:
- virtual void drawScatterPlot(QCPPainter *painter, const QVector<QPointF> *pointData) const;
- // helper functions:
- void getCurveData(QVector<QPointF> *lineData) const;
- double pointDistance(const QPointF &pixelPoint) const;
- QPointF outsideCoordsToPixels(double key, double value, int region) const;
- virtual QCPRange getKeyRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- virtual QCPRange getValueRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPBars : public QCPAbstractPlottable
- {
- Q_OBJECT
- public:
- explicit QCPBars(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPBars();
- // getters:
- double width() const { return mWidth; }
- QCPBars *barBelow() const { return mBarBelow; }
- QCPBars *barAbove() const { return mBarAbove; }
- const QCPBarDataMap *data() const { return mData; }
- // setters:
- void setWidth(double width);
- void setData(QCPBarDataMap *data, bool copy=false);
- void setData(const QVector<double> &key, const QVector<double> &value);
- // non-property methods:
- void moveBelow(QCPBars *bars);
- void moveAbove(QCPBars *bars);
- void addData(const QCPBarDataMap &dataMap);
- void addData(const QCPBarData &data);
- void addData(double key, double value);
- void addData(const QVector<double> &keys, const QVector<double> &values);
- void removeDataBefore(double key);
- void removeDataAfter(double key);
- void removeData(double fromKey, double toKey);
- void removeData(double key);
- virtual void clearData();
- virtual double selectTest(const QPointF &pos) const;
- protected:
- QCPBarDataMap *mData;
- double mWidth;
- QCPBars *mBarBelow, *mBarAbove;
- virtual void draw(QCPPainter *painter);
- virtual void drawLegendIcon(QCPPainter *painter, const QRect &rect) const;
- QPolygonF getBarPolygon(double key, double value) const;
- double getBaseValue(double key, bool positive) const;
- static void connectBars(QCPBars* lower, QCPBars* upper);
- virtual QCPRange getKeyRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- virtual QCPRange getValueRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPStatisticalBox : public QCPAbstractPlottable
- {
- Q_OBJECT
- public:
- explicit QCPStatisticalBox(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPStatisticalBox();
- // getters:
- double key() const { return mKey; }
- double minimum() const { return mMinimum; }
- double lowerQuartile() const { return mLowerQuartile; }
- double median() const { return mMedian; }
- double upperQuartile() const { return mUpperQuartile; }
- double maximum() const { return mMaximum; }
- QVector<double> outliers() const { return mOutliers; }
- double width() const { return mWidth; }
- double whiskerWidth() const { return mWhiskerWidth; }
- QPen whiskerPen() const { return mWhiskerPen; }
- QPen whiskerBarPen() const { return mWhiskerBarPen; }
- QPen medianPen() const { return mMedianPen; }
- double outlierSize() const { return mOutlierSize; }
- QPen outlierPen() const { return mOutlierPen; }
- QCP::ScatterStyle outlierStyle() const { return mOutlierStyle; }
- // setters:
- void setKey(double key);
- void setMinimum(double value);
- void setLowerQuartile(double value);
- void setMedian(double value);
- void setUpperQuartile(double value);
- void setMaximum(double value);
- void setOutliers(const QVector<double> &values);
- void setData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum);
- void setWidth(double width);
- void setWhiskerWidth(double width);
- void setWhiskerPen(const QPen &pen);
- void setWhiskerBarPen(const QPen &pen);
- void setMedianPen(const QPen &pen);
- void setOutlierSize(double pixels);
- void setOutlierPen(const QPen &pen);
- void setOutlierStyle(QCP::ScatterStyle style);
- // non-property methods:
- virtual void clearData();
- virtual double selectTest(const QPointF &pos) const;
- protected:
- QVector<double> mOutliers;
- double mKey, mMinimum, mLowerQuartile, mMedian, mUpperQuartile, mMaximum;
- double mWidth;
- double mWhiskerWidth;
- double mOutlierSize;
- QPen mWhiskerPen, mWhiskerBarPen, mOutlierPen, mMedianPen;
- QCP::ScatterStyle mOutlierStyle;
- virtual void draw(QCPPainter *painter);
- virtual void drawLegendIcon(QCPPainter *painter, const QRect &rect) const;
- virtual void drawQuartileBox(QCPPainter *painter, QRectF *quartileBox=0) const;
- virtual void drawMedian(QCPPainter *painter) const;
- virtual void drawWhiskers(QCPPainter *painter) const;
- virtual void drawOutliers(QCPPainter *painter) const;
- virtual QCPRange getKeyRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- virtual QCPRange getValueRange(bool &validRange, SignDomain inSignDomain=sdBoth) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPItemAnchor
- {
- public:
- QCPItemAnchor(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString name, int anchorId=-1);
- virtual ~QCPItemAnchor();
- QString name() const { return mName; }
- virtual QPointF pixelPoint() const;
- protected:
- QCustomPlot *mParentPlot;
- QCPAbstractItem *mParentItem;
- int mAnchorId;
- QString mName;
- // non-property members:
- QSet<QCPItemPosition*> mChildren;
- void addChild(QCPItemPosition* pos); // called from pos when this anchor is set as parent
- void removeChild(QCPItemPosition *pos); // called from pos when its parent anchor is reset or pos deleted
- private:
- Q_DISABLE_COPY(QCPItemAnchor)
- friend class QCPItemPosition;
- };
- class QCP_LIB_DECL QCPItemPosition : public QCPItemAnchor
- {
- public:
- /*!
- Defines the ways an item position can be specified. Thus it defines what the numbers passed to
- \ref setCoords actually mean.
- \see setType
- */
- enum PositionType { ptAbsolute ///< Static positioning in pixels, starting from the top left corner of the viewport/widget.
- ,ptViewportRatio ///< Static positioning given by a ratio of the current viewport (coordinates 0 to 1).
- ,ptAxisRectRatio ///< Static positioning given by a ratio of the current axis rect (coordinates 0 to 1).
- ,ptPlotCoords ///< Dynamic positioning at a plot coordinate defined by two axes (see \ref setAxes).
- };
- QCPItemPosition(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString name);
- virtual ~QCPItemPosition();
- // getters:
- PositionType type() const { return mPositionType; }
- QCPItemAnchor *parentAnchor() const { return mParentAnchor; }
- double key() const { return mKey; }
- double value() const { return mValue; }
- QPointF coords() const { return QPointF(mKey, mValue); }
- QCPAxis *keyAxis() const { return mKeyAxis; }
- QCPAxis *valueAxis() const { return mValueAxis; }
- virtual QPointF pixelPoint() const;
- // setters:
- void setType(PositionType type);
- bool setParentAnchor(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
- void setCoords(double key, double value);
- void setCoords(const QPointF &coords);
- void setAxes(QCPAxis* keyAxis, QCPAxis* valueAxis);
- void setPixelPoint(const QPointF &pixelPoint);
- protected:
- PositionType mPositionType;
- QCPAxis *mKeyAxis, *mValueAxis;
- double mKey, mValue;
- QCPItemAnchor *mParentAnchor;
- private:
- Q_DISABLE_COPY(QCPItemPosition)
- };
- class QCP_LIB_DECL QCPAbstractItem : public QCPLayerable
- {
- Q_OBJECT
- public:
- QCPAbstractItem(QCustomPlot *parentPlot);
- virtual ~QCPAbstractItem();
- // getters:
- bool clipToAxisRect() const { return mClipToAxisRect; }
- QCPAxis *clipKeyAxis() const { return mClipKeyAxis; }
- QCPAxis *clipValueAxis() const { return mClipValueAxis; }
- bool selectable() const { return mSelectable; }
- bool selected() const { return mSelected; }
- // setters:
- void setClipToAxisRect(bool clip);
- void setClipAxes(QCPAxis *keyAxis, QCPAxis *valueAxis);
- void setClipKeyAxis(QCPAxis *axis);
- void setClipValueAxis(QCPAxis *axis);
- void setSelectable(bool selectable);
- void setSelected(bool selected);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const = 0;
- QList<QCPItemPosition*> positions() const { return mPositions; }
- QList<QCPItemAnchor*> anchors() const { return mAnchors; }
- QCPItemPosition *position(const QString &name) const;
- QCPItemAnchor *anchor(const QString &name) const;
- bool hasAnchor(const QString &name) const;
- protected:
- bool mClipToAxisRect;
- QCPAxis *mClipKeyAxis, *mClipValueAxis;
- bool mSelectable, mSelected;
- QList<QCPItemPosition*> mPositions;
- QList<QCPItemAnchor*> mAnchors;
- virtual QRect clipRect() const;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const;
- virtual void draw(QCPPainter *painter) = 0;
- // helper functions for subclasses:
- double distSqrToLine(const QPointF &start, const QPointF &end, const QPointF &point) const;
- double rectSelectTest(const QRectF &rect, const QPointF &pos, bool filledRect) const;
- // anchor/position interface:
- virtual QPointF anchorPixelPoint(int anchorId) const;
- QCPItemPosition *createPosition(const QString &name);
- QCPItemAnchor *createAnchor(const QString &name, int anchorId);
- signals:
- void selectionChanged(bool selected);
- private:
- Q_DISABLE_COPY(QCPAbstractItem)
- friend class QCustomPlot;
- friend class QCPItemAnchor;
- };
- class QCP_LIB_DECL QCPItemStraightLine : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemStraightLine(QCustomPlot *parentPlot);
- virtual ~QCPItemStraightLine();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const point1;
- QCPItemPosition * const point2;
- protected:
- QPen mPen, mSelectedPen;
- virtual void draw(QCPPainter *painter);
- // helper functions:
- double distToStraightLine(const QVector2D &point1, const QVector2D &vec, const QVector2D &point) const;
- QLineF getRectClippedStraightLine(const QVector2D &point1, const QVector2D &vec, const QRect &rect) const;
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemLine : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemLine(QCustomPlot *parentPlot);
- virtual ~QCPItemLine();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QCPLineEnding head() const { return mHead; }
- QCPLineEnding tail() const { return mTail; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setHead(const QCPLineEnding &head);
- void setTail(const QCPLineEnding &tail);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const start;
- QCPItemPosition * const end;
- protected:
- QPen mPen, mSelectedPen;
- QCPLineEnding mHead, mTail;
- virtual void draw(QCPPainter *painter);
- // helper functions:
- QLineF getRectClippedLine(const QVector2D &start, const QVector2D &end, const QRect &rect) const;
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemEllipse : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemEllipse(QCustomPlot *parentPlot);
- virtual ~QCPItemEllipse();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const topLeft;
- QCPItemPosition * const bottomRight;
- QCPItemAnchor * const topLeftRim;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRightRim;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottomRightRim;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeftRim;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTopLeftRim, aiTop, aiTopRightRim, aiRight, aiBottomRightRim, aiBottom, aiBottomLeftRim, aiLeft};
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- virtual void draw(QCPPainter *painter);
- virtual QPointF anchorPixelPoint(int anchorId) const;
- // helper functions:
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPItemRect : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemRect(QCustomPlot *parentPlot);
- virtual ~QCPItemRect();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const topLeft;
- QCPItemPosition * const bottomRight;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRight;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeft;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft};
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- virtual void draw(QCPPainter *painter);
- virtual QPointF anchorPixelPoint(int anchorId) const;
- // helper functions:
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPItemPixmap : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemPixmap(QCustomPlot *parentPlot);
- virtual ~QCPItemPixmap();
- // getters:
- QPixmap pixmap() const { return mPixmap; }
- bool scaled() const { return mScaled; }
- Qt::AspectRatioMode aspectRatioMode() const { return mAspectRatioMode; }
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- // setters;
- void setPixmap(const QPixmap &pixmap);
- void setScaled(bool scaled, Qt::AspectRatioMode aspectRatioMode=Qt::KeepAspectRatio);
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const topLeft;
- QCPItemPosition * const bottomRight;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRight;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeft;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft};
- QPixmap mPixmap;
- QPixmap mScaledPixmap;
- bool mScaled;
- Qt::AspectRatioMode mAspectRatioMode;
- QPen mPen, mSelectedPen;
- virtual void draw(QCPPainter *painter);
- virtual QPointF anchorPixelPoint(int anchorId) const;
- // helper functions:
- void updateScaledPixmap(QRect finalRect=QRect(), bool flipHorz=false, bool flipVert=false);
- QRect getFinalRect(bool *flippedHorz=0, bool *flippedVert=0) const;
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemText : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemText(QCustomPlot *parentPlot);
- virtual ~QCPItemText();
- // getters:
- QColor color() const { return mColor; }
- QColor selectedColor() const { return mSelectedColor; }
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- QFont font() const { return mFont; }
- QFont selectedFont() const { return mSelectedFont; }
- QString text() const { return mText; }
- Qt::Alignment positionAlignment() const { return mPositionAlignment; }
- Qt::Alignment textAlignment() const { return mTextAlignment; }
- double rotation() const { return mRotation; }
- QMargins padding() const { return mPadding; }
- // setters;
- void setColor(const QColor &color);
- void setSelectedColor(const QColor &color);
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- void setFont(const QFont &font);
- void setSelectedFont(const QFont &font);
- void setText(const QString &text);
- void setPositionAlignment(Qt::Alignment alignment);
- void setTextAlignment(Qt::Alignment alignment);
- void setRotation(double degrees);
- void setPadding(const QMargins &padding);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const position;
- QCPItemAnchor * const topLeft;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRight;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottomRight;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeft;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTopLeft, aiTop, aiTopRight, aiRight, aiBottomRight, aiBottom, aiBottomLeft, aiLeft};
- QColor mColor, mSelectedColor;
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- QFont mFont, mSelectedFont;
- QString mText;
- Qt::Alignment mPositionAlignment;
- Qt::Alignment mTextAlignment;
- double mRotation;
- QMargins mPadding;
- virtual void draw(QCPPainter *painter);
- virtual QPointF anchorPixelPoint(int anchorId) const;
- // helper functions:
- QPointF getTextDrawPoint(const QPointF &pos, const QRectF &rect, Qt::Alignment positionAlignment) const;
- QFont mainFont() const;
- QColor mainColor() const;
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPItemCurve : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- QCPItemCurve(QCustomPlot *parentPlot);
- virtual ~QCPItemCurve();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QCPLineEnding head() const { return mHead; }
- QCPLineEnding tail() const { return mTail; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setHead(const QCPLineEnding &head);
- void setTail(const QCPLineEnding &tail);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const start;
- QCPItemPosition * const startDir;
- QCPItemPosition * const endDir;
- QCPItemPosition * const end;
- protected:
- QPen mPen, mSelectedPen;
- QCPLineEnding mHead, mTail;
- virtual void draw(QCPPainter *painter);
- // helper functions:
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemBracket : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- enum BracketStyle { bsSquare ///< A brace with angled edges
- ,bsRound ///< A brace with round edges
- ,bsCurly ///< A curly brace
- ,bsCalligraphic ///< A curly brace with varying stroke width giving a calligraphic impression
- };
- QCPItemBracket(QCustomPlot *parentPlot);
- virtual ~QCPItemBracket();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- double length() const { return mLength; }
- BracketStyle style() const { return mStyle; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setLength(double length);
- void setStyle(BracketStyle style);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- QCPItemPosition * const left;
- QCPItemPosition * const right;
- QCPItemAnchor * const center;
- protected:
- enum AnchorIndex {aiCenter};
- QPen mPen, mSelectedPen;
- double mLength;
- BracketStyle mStyle;
- virtual void draw(QCPPainter *painter);
- virtual QPointF anchorPixelPoint(int anchorId) const;
- // helper functions:
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemTracer : public QCPAbstractItem
- {
- Q_OBJECT
- public:
- /*!
- The different visual appearances a tracer item can have. Some styles size may be controlled with \ref setSize.
- \see setStyle
- */
- enum TracerStyle { tsNone ///< The tracer is not visible
- ,tsPlus ///< A plus shaped crosshair with limited size
- ,tsCrosshair ///< A plus shaped crosshair which spans the complete axis rect
- ,tsCircle ///< A circle
- ,tsSquare ///< A square
- };
- Q_ENUMS(TracerStyle)
- QCPItemTracer(QCustomPlot *parentPlot);
- virtual ~QCPItemTracer();
- // getters:
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- double size() const { return mSize; }
- TracerStyle style() const { return mStyle; }
- QCPGraph *graph() const { return mGraph; }
- double graphKey() const { return mGraphKey; }
- bool interpolating() const { return mInterpolating; }
- // setters;
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- void setSize(double size);
- void setStyle(TracerStyle style);
- void setGraph(QCPGraph *graph);
- void setGraphKey(double key);
- void setInterpolating(bool enabled);
- // non-property methods:
- virtual double selectTest(const QPointF &pos) const;
- void updatePosition();
- QCPItemPosition * const position;
- protected:
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- double mSize;
- TracerStyle mStyle;
- QCPGraph *mGraph;
- double mGraphKey;
- bool mInterpolating;
- virtual void draw(QCPPainter *painter);
- // helper functions:
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPRange
- {
- public:
- double lower, upper;
- QCPRange();
- QCPRange(double lower, double upper);
- double size() const;
- double center() const;
- void normalize();
- QCPRange sanitizedForLogScale() const;
- QCPRange sanitizedForLinScale() const;
- bool contains(double value) const;
- static bool validRange(double lower, double upper);
- static bool validRange(const QCPRange &range);
- static const double minRange; //1e-280;
- static const double maxRange; //1e280;
- };
- Q_DECLARE_TYPEINFO(QCPRange, Q_MOVABLE_TYPE);
- class QCP_LIB_DECL QCPAbstractLegendItem : public QObject
- {
- Q_OBJECT
- public:
- QCPAbstractLegendItem(QCPLegend *parent);
- virtual ~QCPAbstractLegendItem() {}
- // getters:
- bool antialiased() const { return mAntialiased; }
- QFont font() const { return mFont; }
- QColor textColor() const { return mTextColor; }
- QFont selectedFont() const { return mSelectedFont; }
- QColor selectedTextColor() const { return mSelectedTextColor; }
- bool selectable() const { return mSelectable; }
- bool selected() const { return mSelected; }
- // setters:
- void setAntialiased(bool enabled);
- void setFont(const QFont &font);
- void setTextColor(const QColor &color);
- void setSelectedFont(const QFont &font);
- void setSelectedTextColor(const QColor &color);
- void setSelectable(bool selectable);
- void setSelected(bool selected);
- signals:
- void selectionChanged(bool selected);
- protected:
- QCPLegend *mParentLegend;
- bool mAntialiased;
- QFont mFont;
- QColor mTextColor;
- QFont mSelectedFont;
- QColor mSelectedTextColor;
- bool mSelectable, mSelected;
- virtual void draw(QCPPainter *painter, const QRect &rect) const = 0;
- virtual QSize size(const QSize &targetSize) const = 0;
- void applyAntialiasingHint(QCPPainter *painter) const;
- private:
- Q_DISABLE_COPY(QCPAbstractLegendItem)
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPPlottableLegendItem : public QCPAbstractLegendItem
- {
- Q_OBJECT
- public:
- QCPPlottableLegendItem(QCPLegend *parent, QCPAbstractPlottable *plottable);
- virtual ~QCPPlottableLegendItem() {}
- // getters:
- QCPAbstractPlottable *plottable() { return mPlottable; }
- bool textWrap() const { return mTextWrap; }
- // setters:
- void setTextWrap(bool wrap);
- protected:
- QCPAbstractPlottable *mPlottable;
- bool mTextWrap;
- QPen getIconBorderPen() const;
- QColor getTextColor() const;
- QFont getFont() const;
- virtual void draw(QCPPainter *painter, const QRect &rect) const;
- virtual QSize size(const QSize &targetSize) const;
- };
- class QCP_LIB_DECL QCPLegend : public QCPLayerable
- {
- Q_OBJECT
- public:
- /*!
- Defines where the legend is positioned inside the QCustomPlot axis rect.
- */
- enum PositionStyle { psManual ///< Position is not changed automatically. Set manually via \ref setPosition
- ,psTopLeft ///< Legend is positioned in the top left corner of the axis rect with distance to the border corresponding to the currently set top and left margins
- ,psTop ///< Legend is horizontally centered at the top of the axis rect with distance to the border corresponding to the currently set top margin
- ,psTopRight ///< Legend is positioned in the top right corner of the axis rect with distance to the border corresponding to the currently set top and right margins
- ,psRight ///< Legend is vertically centered at the right of the axis rect with distance to the border corresponding to the currently set right margin
- ,psBottomRight ///< Legend is positioned in the bottom right corner of the axis rect with distance to the border corresponding to the currently set bottom and right margins
- ,psBottom ///< Legend is horizontally centered at the bottom of the axis rect with distance to the border corresponding to the currently set bottom margin
- ,psBottomLeft ///< Legend is positioned in the bottom left corner of the axis rect with distance to the border corresponding to the currently set bottom and left margins
- ,psLeft ///< Legend is vertically centered at the left of the axis rect with distance to the border corresponding to the currently set left margin
- };
- Q_ENUMS(PositionStyle)
- /*!
- Defines the selectable parts of a legend
- */
- enum SelectablePart { spNone = 0 ///< None
- ,spLegendBox = 0x001 ///< The legend box (frame)
- ,spItems = 0x002 ///< Legend items individually (see \ref selectedItems)
- };
- Q_ENUMS(SelectablePart)
- Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
- explicit QCPLegend(QCustomPlot *parentPlot);
- virtual ~QCPLegend();
- // getters:
- QPen borderPen() const { return mBorderPen; }
- QBrush brush() const { return mBrush; }
- QFont font() const { return mFont; }
- QColor textColor() const { return mTextColor; }
- PositionStyle positionStyle() const { return mPositionStyle; }
- QPoint position() const { return mPosition; }
- bool autoSize() const { return mAutoSize; }
- QSize size() const { return mSize; }
- QSize minimumSize() const { return mMinimumSize; }
- int paddingLeft() const { return mPaddingLeft; }
- int paddingRight() const { return mPaddingRight; }
- int paddingTop() const { return mPaddingTop; }
- int paddingBottom() const { return mPaddingBottom; }
- int marginLeft() const { return mMarginLeft; }
- int marginRight() const { return mMarginRight; }
- int marginTop() const { return mMarginTop; }
- int marginBottom() const { return mMarginBottom; }
- int itemSpacing() const { return mItemSpacing; }
- QSize iconSize() const { return mIconSize; }
- int iconTextPadding() const { return mIconTextPadding; }
- QPen iconBorderPen() const { return mIconBorderPen; }
- SelectableParts selectable() const { return mSelectable; }
- SelectableParts selected() const { return mSelected; }
- QPen selectedBorderPen() const { return mSelectedBorderPen; }
- QPen selectedIconBorderPen() const { return mSelectedIconBorderPen; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- QFont selectedFont() const { return mSelectedFont; }
- QColor selectedTextColor() const { return mSelectedTextColor; }
- // setters:
- void setBorderPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setFont(const QFont &font);
- void setTextColor(const QColor &color);
- void setPositionStyle(PositionStyle legendPositionStyle);
- void setPosition(const QPoint &pixelPosition);
- void setAutoSize(bool on);
- void setSize(const QSize &size);
- void setSize(int width, int height);
- void setMinimumSize(const QSize &size);
- void setMinimumSize(int width, int height);
- void setPaddingLeft(int padding);
- void setPaddingRight(int padding);
- void setPaddingTop(int padding);
- void setPaddingBottom(int padding);
- void setPadding(int left, int right, int top, int bottom);
- void setMarginLeft(int margin);
- void setMarginRight(int margin);
- void setMarginTop(int margin);
- void setMarginBottom(int margin);
- void setMargin(int left, int right, int top, int bottom);
- void setItemSpacing(int spacing);
- void setIconSize(const QSize &size);
- void setIconSize(int width, int height);
- void setIconTextPadding(int padding);
- void setIconBorderPen(const QPen &pen);
- void setSelectable(const SelectableParts &selectable);
- void setSelected(const SelectableParts &selected);
- void setSelectedBorderPen(const QPen &pen);
- void setSelectedIconBorderPen(const QPen &pen);
- void setSelectedBrush(const QBrush &brush);
- void setSelectedFont(const QFont &font);
- void setSelectedTextColor(const QColor &color);
- // non-property methods:
- QCPAbstractLegendItem *item(int index) const;
- QCPPlottableLegendItem *itemWithPlottable(const QCPAbstractPlottable *plottable) const;
- int itemCount() const;
- bool hasItem(QCPAbstractLegendItem *item) const;
- bool hasItemWithPlottable(const QCPAbstractPlottable *plottable) const;
- bool addItem(QCPAbstractLegendItem *item);
- bool removeItem(int index);
- bool removeItem(QCPAbstractLegendItem *item);
- void clearItems();
- QList<QCPAbstractLegendItem*> selectedItems() const;
- void reArrange();
- bool selectTestLegend(const QPointF &pos) const;
- QCPAbstractLegendItem *selectTestItem(const QPoint pos) const;
- signals:
- void selectionChanged(QCPLegend::SelectableParts selection);
- protected:
- // simple properties with getters and setters:
- QPen mBorderPen, mIconBorderPen;
- QBrush mBrush;
- QFont mFont;
- QColor mTextColor;
- QPoint mPosition;
- QSize mSize, mMinimumSize, mIconSize;
- PositionStyle mPositionStyle;
- bool mAutoSize;
- int mPaddingLeft, mPaddingRight, mPaddingTop, mPaddingBottom;
- int mMarginLeft, mMarginRight, mMarginTop, mMarginBottom;
- int mItemSpacing, mIconTextPadding;
- SelectableParts mSelected, mSelectable;
- QPen mSelectedBorderPen, mSelectedIconBorderPen;
- QBrush mSelectedBrush;
- QFont mSelectedFont;
- QColor mSelectedTextColor;
- // internal or not explicitly exposed properties:
- QList<QCPAbstractLegendItem*> mItems;
- QMap<QCPAbstractLegendItem*, QRect> mItemBoundingBoxes;
- virtual void updateSelectionState();
- virtual bool handleLegendSelection(QMouseEvent *event, bool additiveSelection, bool &modified);
- // introduced methods:
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const;
- virtual void draw(QCPPainter *painter);
- virtual void calculateAutoSize();
- virtual void calculateAutoPosition();
- // drawing helpers:
- QPen getBorderPen() const;
- QBrush getBrush() const;
- private:
- Q_DISABLE_COPY(QCPLegend)
- friend class QCustomPlot;
- friend class QCPAbstractLegendItem;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPLegend::SelectableParts)
- class QCP_LIB_DECL QCPGrid : public QCPLayerable
- {
- Q_OBJECT
- public:
- QCPGrid(QCPAxis *parentAxis);
- ~QCPGrid();
- // getters:
- bool subGridVisible() const { return mSubGridVisible; }
- bool antialiasedSubGrid() const { return mAntialiasedSubGrid; }
- bool antialiasedZeroLine() const { return mAntialiasedZeroLine; }
- QPen pen() const { return mPen; }
- QPen subGridPen() const { return mSubGridPen; }
- QPen zeroLinePen() const { return mZeroLinePen; }
- // setters:
- void setSubGridVisible(bool visible);
- void setAntialiasedSubGrid(bool enabled);
- void setAntialiasedZeroLine(bool enabled);
- void setPen(const QPen &pen);
- void setSubGridPen(const QPen &pen);
- void setZeroLinePen(const QPen &pen);
- protected:
- QCPAxis *mParentAxis;
- bool mSubGridVisible;
- bool mAntialiasedSubGrid, mAntialiasedZeroLine;
- QPen mPen, mSubGridPen, mZeroLinePen;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const;
- virtual void draw(QCPPainter *painter);
- // drawing helpers:
- void drawGridLines(QCPPainter *painter) const;
- void drawSubGridLines(QCPPainter *painter) const;
- friend class QCPAxis;
- };
- class QCP_LIB_DECL QCPAxis : public QCPLayerable
- {
- Q_OBJECT
- /// \cond INCLUDE_QPROPERTIES
- Q_PROPERTY(AxisType axisType READ axisType WRITE setAxisType)
- Q_PROPERTY(ScaleType scaleType READ scaleType WRITE setScaleType)
- Q_PROPERTY(double scaleLogBase READ scaleLogBase WRITE setScaleLogBase)
- Q_PROPERTY(QRect axisRect READ axisRect WRITE setAxisRect)
- Q_PROPERTY(QCPRange range READ range WRITE setRange)
- Q_PROPERTY(bool grid READ grid WRITE setGrid)
- Q_PROPERTY(bool subGrid READ subGrid WRITE setSubGrid)
- Q_PROPERTY(bool autoTicks READ autoTicks WRITE setAutoTicks)
- Q_PROPERTY(int autoTickCount READ autoTickCount WRITE setAutoTickCount)
- Q_PROPERTY(bool autoTickLabels READ autoTickLabels WRITE setAutoTickLabels)
- Q_PROPERTY(bool autoTickStep READ autoTickStep WRITE setAutoTickStep)
- Q_PROPERTY(bool autoSubTicks READ autoSubTicks WRITE setAutoSubTicks)
- Q_PROPERTY(bool ticks READ ticks WRITE setTicks)
- Q_PROPERTY(bool tickLabels READ tickLabels WRITE setTickLabels)
- Q_PROPERTY(int tickLabelPadding READ tickLabelPadding WRITE setTickLabelPadding)
- Q_PROPERTY(LabelType tickLabelType READ tickLabelType WRITE setTickLabelType)
- Q_PROPERTY(QFont tickLabelFont READ tickLabelFont WRITE setTickLabelFont)
- Q_PROPERTY(double tickLabelRotation READ tickLabelRotation WRITE setTickLabelRotation)
- Q_PROPERTY(QString dateTimeFormat READ dateTimeFormat WRITE setDateTimeFormat)
- Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat)
- Q_PROPERTY(double tickStep READ tickStep WRITE setTickStep)
- Q_PROPERTY(QVector<double> tickVector READ tickVector WRITE setTickVector)
- Q_PROPERTY(QVector<QString> tickVectorLabels READ tickVectorLabels WRITE setTickVectorLabels)
- Q_PROPERTY(int subTickCount READ subTickCount WRITE setSubTickCount)
- Q_PROPERTY(QPen basePen READ basePen WRITE setBasePen)
- Q_PROPERTY(QPen gridPen READ gridPen WRITE setGridPen)
- Q_PROPERTY(QPen subGridPen READ subGridPen WRITE setSubGridPen)
- Q_PROPERTY(QPen tickPen READ tickPen WRITE setTickPen)
- Q_PROPERTY(QPen subTickPen READ subTickPen WRITE setSubTickPen)
- Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont)
- Q_PROPERTY(QString label READ label WRITE setLabel)
- Q_PROPERTY(int labelPadding READ labelPadding WRITE setLabelPadding)
- /// \endcond
- public:
- /*!
- Defines at which side of the axis rect the axis will appear. This also affects how the tick
- marks are drawn, on which side the labels are placed etc.
- \see setAxisType
- */
- enum AxisType { atLeft ///< Axis is vertical and on the left side of the axis rect of the parent QCustomPlot
- ,atRight ///< Axis is vertical and on the right side of the axis rect of the parent QCustomPlot
- ,atTop ///< Axis is horizontal and on the top side of the axis rect of the parent QCustomPlot
- ,atBottom ///< Axis is horizontal and on the bottom side of the axis rect of the parent QCustomPlot
- };
- Q_ENUMS(AxisType)
- /*!
- When automatic tick label generation is enabled (\ref setAutoTickLabels), defines how the
- numerical value (coordinate) of the tick position is translated into a string that will be
- drawn at the tick position.
- \see setTickLabelType
- */
- enum LabelType { ltNumber ///< Tick coordinate is regarded as normal number and will be displayed as such. (see \ref setNumberFormat)
- ,ltDateTime ///< Tick coordinate is regarded as a date/time (seconds since 1970-01-01T00:00:00 UTC, see QDateTime::toTime_t) and will be displayed and formatted as such. (see \ref setDateTimeFormat)
- };
- Q_ENUMS(LabelType)
- /*!
- Defines the scale of an axis.
- \see setScaleType
- */
- enum ScaleType { stLinear ///< Normal linear scaling
- ,stLogarithmic ///< Logarithmic scaling with correspondingly transformed plots and (major) tick marks at every base power (see \ref setScaleLogBase).
- };
- Q_ENUMS(ScaleType)
- /*!
- Defines the selectable parts of an axis.
- \see setSelectable, setSelected
- */
- enum SelectablePart { spNone = 0 ///< None of the selectable parts
- ,spAxis = 0x001 ///< The axis backbone and tick marks
- ,spTickLabels = 0x002 ///< Tick labels (numbers) of this axis (as a whole, not individually)
- ,spAxisLabel = 0x004 ///< The axis label
- };
- Q_ENUMS(SelectablePart)
- Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
- explicit QCPAxis(QCustomPlot *parentPlot, AxisType type);
- virtual ~QCPAxis();
- // getters:
- AxisType axisType() const { return mAxisType; }
- QRect axisRect() const { return mAxisRect; }
- ScaleType scaleType() const { return mScaleType; }
- double scaleLogBase() const { return mScaleLogBase; }
- const QCPRange range() const { return mRange; }
- bool rangeReversed() const { return mRangeReversed; }
- bool antialiasedGrid() const { return mGrid->antialiased(); }
- bool antialiasedSubGrid() const { return mGrid->antialiasedSubGrid(); }
- bool antialiasedZeroLine() const { return mGrid->antialiasedZeroLine(); }
- bool grid() const { return mGrid->visible(); }
- bool subGrid() const { return mGrid->subGridVisible(); }
- bool autoTicks() const { return mAutoTicks; }
- int autoTickCount() const { return mAutoTickCount; }
- bool autoTickLabels() const { return mAutoTickLabels; }
- bool autoTickStep() const { return mAutoTickStep; }
- bool autoSubTicks() const { return mAutoSubTicks; }
- bool ticks() const { return mTicks; }
- bool tickLabels() const { return mTickLabels; }
- int tickLabelPadding() const { return mTickLabelPadding; }
- LabelType tickLabelType() const { return mTickLabelType; }
- QFont tickLabelFont() const { return mTickLabelFont; }
- QColor tickLabelColor() const { return mTickLabelColor; }
- double tickLabelRotation() const { return mTickLabelRotation; }
- QString dateTimeFormat() const { return mDateTimeFormat; }
- QString numberFormat() const;
- int numberPrecision() const { return mNumberPrecision; }
- double tickStep() const { return mTickStep; }
- QVector<double> tickVector() const { return mTickVector; }
- QVector<QString> tickVectorLabels() const { return mTickVectorLabels; }
- int tickLengthIn() const { return mTickLengthIn; }
- int tickLengthOut() const { return mTickLengthOut; }
- int subTickCount() const { return mSubTickCount; }
- int subTickLengthIn() const { return mSubTickLengthIn; }
- int subTickLengthOut() const { return mSubTickLengthOut; }
- QPen basePen() const { return mBasePen; }
- QPen gridPen() const { return mGrid->pen(); }
- QPen subGridPen() const { return mGrid->subGridPen(); }
- QPen zeroLinePen() const { return mGrid->zeroLinePen(); }
- QPen tickPen() const { return mTickPen; }
- QPen subTickPen() const { return mSubTickPen; }
- QFont labelFont() const { return mLabelFont; }
- QColor labelColor() const { return mLabelColor; }
- QString label() const { return mLabel; }
- int labelPadding() const { return mLabelPadding; }
- int padding() const { return mPadding; }
- SelectableParts selected() const { return mSelected; }
- SelectableParts selectable() const { return mSelectable; }
- QFont selectedTickLabelFont() const { return mSelectedTickLabelFont; }
- QFont selectedLabelFont() const { return mSelectedLabelFont; }
- QColor selectedTickLabelColor() const { return mSelectedTickLabelColor; }
- QColor selectedLabelColor() const { return mSelectedLabelColor; }
- QPen selectedBasePen() const { return mSelectedBasePen; }
- QPen selectedTickPen() const { return mSelectedTickPen; }
- QPen selectedSubTickPen() const { return mSelectedSubTickPen; }
- // setters:
- void setScaleType(ScaleType type);
- void setScaleLogBase(double base);
- void setRange(double lower, double upper);
- void setRange(double position, double size, Qt::AlignmentFlag alignment);
- void setRangeLower(double lower);
- void setRangeUpper(double upper);
- void setRangeReversed(bool reversed);
- void setAntialiasedGrid(bool enabled);
- void setAntialiasedSubGrid(bool enabled);
- void setAntialiasedZeroLine(bool enabled);
- void setGrid(bool show);
- void setSubGrid(bool show);
- void setAutoTicks(bool on);
- void setAutoTickCount(int approximateCount);
- void setAutoTickLabels(bool on);
- void setAutoTickStep(bool on);
- void setAutoSubTicks(bool on);
- void setTicks(bool show);
- void setTickLabels(bool show);
- void setTickLabelPadding(int padding);
- void setTickLabelType(LabelType type);
- void setTickLabelFont(const QFont &font);
- void setTickLabelColor(const QColor &color);
- void setTickLabelRotation(double degrees);
- void setDateTimeFormat(const QString &format);
- void setNumberFormat(const QString &formatCode);
- void setNumberPrecision(int precision);
- void setTickStep(double step);
- void setTickVector(const QVector<double> &vec);
- void setTickVectorLabels(const QVector<QString> &vec);
- void setTickLength(int inside, int outside=0);
- void setSubTickCount(int count);
- void setSubTickLength(int inside, int outside=0);
- void setBasePen(const QPen &pen);
- void setGridPen(const QPen &pen);
- void setSubGridPen(const QPen &pen);
- void setZeroLinePen(const QPen &pen);
- void setTickPen(const QPen &pen);
- void setSubTickPen(const QPen &pen);
- void setLabelFont(const QFont &font);
- void setLabelColor(const QColor &color);
- void setLabel(const QString &str);
- void setLabelPadding(int padding);
- void setPadding(int padding);
- void setSelectedTickLabelFont(const QFont &font);
- void setSelectedLabelFont(const QFont &font);
- void setSelectedTickLabelColor(const QColor &color);
- void setSelectedLabelColor(const QColor &color);
- void setSelectedBasePen(const QPen &pen);
- void setSelectedTickPen(const QPen &pen);
- void setSelectedSubTickPen(const QPen &pen);
- // non-property methods:
- Qt::Orientation orientation() const { return mOrientation; }
- void moveRange(double diff);
- void scaleRange(double factor, double center);
- void setScaleRatio(const QCPAxis *otherAxis, double ratio=1.0);
- double pixelToCoord(double value) const;
- double coordToPixel(double value) const;
- SelectablePart selectTest(const QPointF &pos) const;
- public slots:
- // slot setters:
- void setRange(const QCPRange &range);
- void setSelectable(const QCPAxis::SelectableParts &selectable);
- void setSelected(const QCPAxis::SelectableParts &selected);
- signals:
- void ticksRequest();
- void rangeChanged(const QCPRange &newRange);
- void selectionChanged(QCPAxis::SelectableParts selection);
- protected:
- // simple properties with getters and setters:
- QVector<double> mTickVector;
- QVector<QString> mTickVectorLabels;
- QCPRange mRange;
- QString mDateTimeFormat;
- QString mLabel;
- QRect mAxisRect;
- QPen mBasePen, mTickPen, mSubTickPen;
- QFont mTickLabelFont, mLabelFont;
- QColor mTickLabelColor, mLabelColor;
- LabelType mTickLabelType;
- ScaleType mScaleType;
- AxisType mAxisType;
- double mTickStep;
- double mScaleLogBase, mScaleLogBaseLogInv;
- int mSubTickCount, mTickLengthIn, mTickLengthOut, mSubTickLengthIn, mSubTickLengthOut;
- int mAutoTickCount;
- int mTickLabelPadding, mLabelPadding, mPadding;
- double mTickLabelRotation;
- bool mTicks, mTickLabels, mAutoTicks, mAutoTickLabels, mAutoTickStep, mAutoSubTicks;
- bool mRangeReversed;
- SelectableParts mSelectable, mSelected;
- QFont mSelectedTickLabelFont, mSelectedLabelFont;
- QColor mSelectedTickLabelColor, mSelectedLabelColor;
- QPen mSelectedBasePen, mSelectedTickPen, mSelectedSubTickPen;
- QRect mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox;
- // internal or not explicitly exposed properties:
- QCPGrid *mGrid;
- QVector<double> mSubTickVector;
- QChar mExponentialChar, mPositiveSignChar;
- int mNumberPrecision;
- char mNumberFormatChar;
- bool mNumberBeautifulPowers, mNumberMultiplyCross;
- Qt::Orientation mOrientation;
- int mLowestVisibleTick, mHighestVisibleTick;
- // internal setters:
- void setAxisType(AxisType type);
- void setAxisRect(const QRect &rect);
- // introduced methods:
- virtual void setupTickVectors();
- virtual void generateAutoTicks();
- virtual int calculateAutoSubTickCount(double tickStep) const;
- virtual int calculateMargin() const;
- virtual bool handleAxisSelection(QMouseEvent *event, bool additiveSelection, bool &modified);
- // drawing:
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const;
- virtual void draw(QCPPainter *painter);
- virtual void drawTickLabel(QCPPainter *painter, double position, int distanceToAxis, const QString &text, QSize *tickLabelsSize);
- virtual void getMaxTickLabelSize(const QFont &font, const QString &text, QSize *tickLabelsSize) const;
- // basic non virtual helpers:
- void visibleTickBounds(int &lowIndex, int &highIndex) const;
- double baseLog(double value) const;
- double basePow(double value) const;
- // helpers to get the right pen/font depending on selection state:
- QPen getBasePen() const;
- QPen getTickPen() const;
- QPen getSubTickPen() const;
- QFont getTickLabelFont() const;
- QFont getLabelFont() const;
- QColor getTickLabelColor() const;
- QColor getLabelColor() const;
- private:
- Q_DISABLE_COPY(QCPAxis)
- friend class QCustomPlot;
- friend class QCPGrid;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::SelectableParts)
- class QCP_LIB_DECL QCustomPlot : public QWidget
- {
- Q_OBJECT
- /// \cond INCLUDE_QPROPERTIES
- Q_PROPERTY(QString title READ title WRITE setTitle)
- Q_PROPERTY(QRect axisRect READ axisRect WRITE setAxisRect)
- Q_PROPERTY(int marginLeft READ marginLeft WRITE setMarginLeft)
- Q_PROPERTY(int marginRight READ marginRight WRITE setMarginRight)
- Q_PROPERTY(int marginTop READ marginTop WRITE setMarginTop)
- Q_PROPERTY(int marginBottom READ marginBottom WRITE setMarginBottom)
- Q_PROPERTY(int autoMargin READ autoMargin WRITE setAutoMargin)
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(Qt::Orientations rangeDrag READ rangeDrag WRITE setRangeDrag)
- Q_PROPERTY(Qt::Orientations rangeZoom READ rangeZoom WRITE setRangeZoom)
- /// \endcond
- public:
- /*!
- Defines the mouse interactions possible with QCustomPlot
- \c Interactions is a flag of or-combined elements of this enum type.
- \see setInteractions, setInteraction
- */
- enum Interaction { iRangeDrag = 0x001 ///< <tt>0x001</tt> Axis ranges are draggable (see \ref setRangeDrag, \ref setRangeDragAxes)
- ,iRangeZoom = 0x002 ///< <tt>0x002</tt> Axis ranges are zoomable with the mouse wheel (see \ref setRangeZoom, \ref setRangeZoomAxes)
- ,iMultiSelect = 0x004 ///< <tt>0x004</tt> The user can select multiple objects by holding the modifier set by \ref setMultiSelectModifier while clicking
- ,iSelectTitle = 0x008 ///< <tt>0x008</tt> The plot title is selectable
- ,iSelectPlottables = 0x010 ///< <tt>0x010</tt> Plottables are selectable
- ,iSelectAxes = 0x020 ///< <tt>0x020</tt> Axes are selectable (or parts of them, see QCPAxis::setSelectable)
- ,iSelectLegend = 0x040 ///< <tt>0x040</tt> Legends are selectable (or their child items, see QCPLegend::setSelectable)
- ,iSelectItems = 0x080 ///< <tt>0x080</tt> Items are selectable (Rectangles, Arrows, Textitems, etc. see \ref QCPAbstractItem)
- };
- Q_ENUMS(Interaction)
- Q_DECLARE_FLAGS(Interactions, Interaction)
- /*!
- Defines how a layer should be inserted relative to a specified other layer.
- \see addLayer, moveLayer
- */
- enum LayerInsertMode { limBelow ///< Layer is inserted below other layer
- ,limAbove ///< Layer is inserted above other layer
- };
- Q_ENUMS(LayerInsertMode)
- explicit QCustomPlot(QWidget *parent = 0);
- virtual ~QCustomPlot();
- // getters:
- QString title() const { return mTitle; }
- QFont titleFont() const { return mTitleFont; }
- QColor titleColor() const { return mTitleColor; }
- QRect axisRect() const { return mAxisRect; }
- QRect viewport() const { return mViewport; }
- int marginLeft() const { return mMarginLeft; }
- int marginRight() const { return mMarginRight; }
- int marginTop() const { return mMarginTop; }
- int marginBottom() const { return mMarginBottom; }
- bool autoMargin() const { return mAutoMargin; }
- QColor color() const { return mColor; }
- Qt::Orientations rangeDrag() const { return mRangeDrag; }
- Qt::Orientations rangeZoom() const { return mRangeZoom; }
- QCPAxis *rangeDragAxis(Qt::Orientation orientation);
- QCPAxis *rangeZoomAxis(Qt::Orientation orientation);
- double rangeZoomFactor(Qt::Orientation orientation);
- QCP::AntialiasedElements antialiasedElements() const { return mAntialiasedElements; }
- QCP::AntialiasedElements notAntialiasedElements() const { return mNotAntialiasedElements; }
- bool autoAddPlottableToLegend() const { return mAutoAddPlottableToLegend; }
- QPixmap axisBackground() const { return mAxisBackground; }
- bool axisBackgroundScaled() const { return mAxisBackgroundScaled; }
- Qt::AspectRatioMode axisBackgroundScaledMode() const { return mAxisBackgroundScaledMode; }
- const Interactions interactions() const { return mInteractions; }
- int selectionTolerance() const { return mSelectionTolerance; }
- QFont selectedTitleFont() const { return mSelectedTitleFont; }
- QColor selectedTitleColor() const { return mSelectedTitleColor; }
- bool titleSelected() const { return mTitleSelected; }
- bool noAntialiasingOnDrag() const { return mNoAntialiasingOnDrag; }
- QCP::PlottingHints plottingHints() const { return mPlottingHints; }
- Qt::KeyboardModifier multiSelectModifier() const { return mMultiSelectModifier; }
- // setters:
- void setTitle(const QString &title);
- void setTitleFont(const QFont &font);
- void setTitleColor(const QColor &color);
- void setAxisRect(const QRect &arect);
- void setMarginLeft(int margin);
- void setMarginRight(int margin);
- void setMarginTop(int margin);
- void setMarginBottom(int margin);
- void setMargin(int left, int right, int top, int bottom);
- void setAutoMargin(bool enabled);
- void setColor(const QColor &color);
- void setRangeDrag(Qt::Orientations orientations);
- void setRangeZoom(Qt::Orientations orientations);
- void setRangeDragAxes(QCPAxis *horizontal, QCPAxis *vertical);
- void setRangeZoomAxes(QCPAxis *horizontal, QCPAxis *vertical);
- void setRangeZoomFactor(double horizontalFactor, double verticalFactor);
- void setRangeZoomFactor(double factor);
- void setAntialiasedElements(const QCP::AntialiasedElements &antialiasedElements);
- void setAntialiasedElement(QCP::AntialiasedElement antialiasedElement, bool enabled=true);
- void setNotAntialiasedElements(const QCP::AntialiasedElements ¬AntialiasedElements);
- void setNotAntialiasedElement(QCP::AntialiasedElement notAntialiasedElement, bool enabled=true);
- void setAutoAddPlottableToLegend(bool on);
- void setAxisBackground(const QPixmap &pm);
- void setAxisBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding);
- void setAxisBackgroundScaled(bool scaled);
- void setAxisBackgroundScaledMode(Qt::AspectRatioMode mode);
- void setInteractions(const Interactions &interactions);
- void setInteraction(const Interaction &interaction, bool enabled=true);
- void setSelectionTolerance(int pixels);
- void setSelectedTitleFont(const QFont &font);
- void setSelectedTitleColor(const QColor &color);
- void setTitleSelected(bool selected);
- void setNoAntialiasingOnDrag(bool enabled);
- void setPlottingHints(const QCP::PlottingHints &hints);
- void setPlottingHint(QCP::PlottingHint hint, bool enabled=true);
- void setMultiSelectModifier(Qt::KeyboardModifier modifier);
- // non-property methods:
- // plottable interface:
- QCPAbstractPlottable *plottable(int index);
- QCPAbstractPlottable *plottable();
- bool addPlottable(QCPAbstractPlottable *plottable);
- bool removePlottable(QCPAbstractPlottable *plottable);
- bool removePlottable(int index);
- int clearPlottables();
- int plottableCount() const;
- QList<QCPAbstractPlottable*> selectedPlottables() const;
- QCPAbstractPlottable *plottableAt(const QPointF &pos, bool onlySelectable=false) const;
- bool hasPlottable(QCPAbstractPlottable *plottable) const;
- // specialized interface for QCPGraph:
- QCPGraph *graph(int index) const;
- QCPGraph *graph() const;
- QCPGraph *addGraph(QCPAxis *keyAxis=0, QCPAxis *valueAxis=0);
- bool removeGraph(QCPGraph *graph);
- bool removeGraph(int index);
- int clearGraphs();
- int graphCount() const;
- QList<QCPGraph*> selectedGraphs() const;
- // item interface:
- QCPAbstractItem *item(int index) const;
- QCPAbstractItem *item() const;
- bool addItem(QCPAbstractItem* item);
- bool removeItem(QCPAbstractItem *item);
- bool removeItem(int index);
- int clearItems();
- int itemCount() const;
- QList<QCPAbstractItem*> selectedItems() const;
- QCPAbstractItem *itemAt(const QPointF &pos, bool onlySelectable=false) const;
- // layer interface:
- QCPLayer *layer(const QString &name) const;
- QCPLayer *layer(int index) const;
- QCPLayer *currentLayer() const;
- bool setCurrentLayer(const QString &name);
- bool setCurrentLayer(QCPLayer *layer);
- int layerCount() const;
- bool addLayer(const QString &name, QCPLayer *otherLayer=0, LayerInsertMode insertMode=limAbove);
- bool removeLayer(QCPLayer *layer);
- bool moveLayer(QCPLayer *layer, QCPLayer *otherLayer, LayerInsertMode insertMode=limAbove);
- QList<QCPAxis*> selectedAxes() const;
- QList<QCPLegend*> selectedLegends() const;
- void setupFullAxesBox();
- bool savePdf(const QString &fileName, bool noCosmeticPen=false, int width=0, int height=0);
- bool savePng(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1);
- bool saveJpg(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1);
- bool saveBmp(const QString &fileName, int width=0, int height=0, double scale=1.0);
- bool saveRastered(const QString &fileName, int width, int height, double scale, const char *format, int quality=-1);
- QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2;
- QCPLegend *legend;
- public slots:
- void deselectAll();
- void replot();
- void rescaleAxes();
- signals:
- void mouseDoubleClick(QMouseEvent *event);
- void mousePress(QMouseEvent *event);
- void mouseMove(QMouseEvent *event);
- void mouseRelease(QMouseEvent *event);
- void mouseWheel(QWheelEvent *event);
- void plottableClick(QCPAbstractPlottable *plottable, QMouseEvent *event);
- void plottableDoubleClick(QCPAbstractPlottable *plottable, QMouseEvent *event);
- void itemClick(QCPAbstractItem *item, QMouseEvent *event);
- void itemDoubleClick(QCPAbstractItem *item, QMouseEvent *event);
- void axisClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event);
- void axisDoubleClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event);
- void legendClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
- void legendDoubleClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
- void titleClick(QMouseEvent *event);
- void titleDoubleClick(QMouseEvent *event);
- void selectionChangedByUser();
- void beforeReplot();
- void afterReplot();
- protected:
- QString mTitle;
- QFont mTitleFont, mSelectedTitleFont;
- QColor mTitleColor, mSelectedTitleColor;
- QRect mViewport;
- QRect mAxisRect;
- int mMarginLeft, mMarginRight, mMarginTop, mMarginBottom;
- bool mAutoMargin, mAutoAddPlottableToLegend;
- QColor mColor;
- QList<QCPAbstractPlottable*> mPlottables;
- QList<QCPGraph*> mGraphs; // extra list of items also in mPlottables that are of type QCPGraph
- QList<QCPAbstractItem*> mItems;
- QList<QCPLayer*> mLayers;
- Qt::Orientations mRangeDrag, mRangeZoom;
- QCPAxis *mRangeDragHorzAxis, *mRangeDragVertAxis, *mRangeZoomHorzAxis, *mRangeZoomVertAxis;
- double mRangeZoomFactorHorz, mRangeZoomFactorVert;
- bool mDragging;
- QCP::AntialiasedElements mAntialiasedElements, mNotAntialiasedElements;
- QPixmap mAxisBackground;
- bool mAxisBackgroundScaled;
- Qt::AspectRatioMode mAxisBackgroundScaledMode;
- Interactions mInteractions;
- int mSelectionTolerance;
- bool mTitleSelected;
- QRect mTitleBoundingBox;
- bool mNoAntialiasingOnDrag;
- // not explicitly exposed properties:
- QPixmap mPaintBuffer;
- QPoint mDragStart;
- QCPRange mDragStartHorzRange, mDragStartVertRange;
- QPixmap mScaledAxisBackground;
- bool mReplotting;
- QCP::AntialiasedElements mAADragBackup, mNotAADragBackup;
- QCPLayer *mCurrentLayer;
- QCP::PlottingHints mPlottingHints;
- Qt::KeyboardModifier mMultiSelectModifier;
- // reimplemented methods:
- virtual QSize minimumSizeHint() const;
- virtual void paintEvent(QPaintEvent *event);
- virtual void resizeEvent(QResizeEvent *event);
- virtual void mouseDoubleClickEvent(QMouseEvent *event);
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void wheelEvent(QWheelEvent *event);
- // event helpers:
- virtual bool handlePlottableSelection(QMouseEvent *event, bool additiveSelection, bool &modified);
- virtual bool handleItemSelection(QMouseEvent *event, bool additiveSelection, bool &modified);
- virtual bool handleAxisSelection(QMouseEvent *event, bool additiveSelection, bool &modified);
- virtual bool handleTitleSelection(QMouseEvent *event, bool additiveSelection, bool &modified);
- // introduced methods:
- virtual void draw(QCPPainter *painter);
- virtual void drawAxisBackground(QCPPainter *painter);
- // helpers:
- void updateAxisRect();
- bool selectTestTitle(const QPointF &pos) const;
- friend class QCPLegend;
- friend class QCPAxis;
- friend class QCPLayer;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCustomPlot::Interactions)
- #endif // QCUSTOMPLOT_H
Add Comment
Please, Sign In to add comment