Main Page · Class Overview · Hierarchy · All Classes
Public Functions | Protected Functions
QCPGrid Class Reference

Responsible for drawing the grid of a QCPAxis. More...

Inheritance diagram for QCPGrid:
Inheritance graph

Public Functions

 QCPGrid (QCPAxis *parentAxis)
bool subGridVisible () const
bool antialiasedSubGrid () const
bool antialiasedZeroLine () const
QPen pen () const
QPen subGridPen () const
QPen zeroLinePen () const
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)
bool visible () const
QCustomPlotparentPlot () const
QCPLayerableparentLayerable () const
QCPLayerlayer () const
bool antialiased () const
void setVisible (bool on)
bool setLayer (QCPLayer *layer)
bool setLayer (const QString &layerName)
void setAntialiased (bool enabled)
virtual double selectTest (const QPointF &pos, bool onlySelectable, QVariant *details=0) const
bool realVisibility () const

Protected Functions

virtual void applyDefaultAntialiasingHint (QCPPainter *painter) const
virtual void draw (QCPPainter *painter)
void drawGridLines (QCPPainter *painter) const
void drawSubGridLines (QCPPainter *painter) const
virtual void parentPlotInitialized (QCustomPlot *parentPlot)
virtual QCP::Interaction selectionCategory () const
virtual QRect clipRect () const
virtual void selectEvent (QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged)
virtual void deselectEvent (bool *selectionStateChanged)
void initializeParentPlot (QCustomPlot *parentPlot)
void setParentLayerable (QCPLayerable *parentLayerable)
bool moveToLayer (QCPLayer *layer, bool prepend)
void applyAntialiasingHint (QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const

Detailed Description

Responsible for drawing the grid of a QCPAxis.

This class is tightly bound to QCPAxis. Every axis owns a grid instance and uses it to draw the grid lines, sub grid lines and zero-line. You can interact with the grid of an axis via QCPAxis::grid. Normally, you don't need to create an instance of QCPGrid yourself.

The axis and grid drawing was split into two classes to allow them to be placed on different layers (both QCPAxis and QCPGrid inherit from QCPLayerable). Thus it is possible to have the grid in the background and the axes in the foreground, and any plottables/items in between. This described situation is the default setup, see the QCPLayer documentation.

Constructor & Destructor Documentation

QCPGrid::QCPGrid ( QCPAxis parentAxis)

Creates a QCPGrid instance and sets default values.

You shouldn't instantiate grids on their own, since every QCPAxis brings its own QCPGrid.

Member Function Documentation

void QCPGrid::setSubGridVisible ( bool  visible)

Sets whether grid lines at sub tick marks are drawn.

See Also
setSubGridPen
void QCPGrid::setAntialiasedSubGrid ( bool  enabled)

Sets whether sub grid lines are drawn antialiased.

void QCPGrid::setAntialiasedZeroLine ( bool  enabled)

Sets whether zero lines are drawn antialiased.

void QCPGrid::setPen ( const QPen &  pen)

Sets the pen with which (major) grid lines are drawn.

void QCPGrid::setSubGridPen ( const QPen &  pen)

Sets the pen with which sub grid lines are drawn.

void QCPGrid::setZeroLinePen ( const QPen &  pen)

Sets the pen with which zero lines are drawn.

Zero lines are lines at value coordinate 0 which may be drawn with a different pen than other grid lines. To disable zero lines and just draw normal grid lines at zero, set pen to Qt::NoPen.

void QCPGrid::applyDefaultAntialiasingHint ( QCPPainter painter) const
protectedvirtual

A convenience function to easily set the QPainter::Antialiased hint on the provided painter before drawing the major grid lines.

This is the antialiasing state the painter passed to the draw method is in by default.

This function takes into account the local setting of the antialiasing flag as well as the overrides set with QCustomPlot::setAntialiasedElements and QCustomPlot::setNotAntialiasedElements.

See Also
setAntialiased

Implements QCPLayerable.

void QCPGrid::draw ( QCPPainter painter)
protectedvirtual

Draws grid lines and sub grid lines at the positions of (sub) ticks of the parent axis, spanning over the complete axis rect. Also draws the zero line, if appropriate (setZeroLinePen).

Implements QCPLayerable.

void QCPGrid::drawGridLines ( QCPPainter painter) const
protected

Draws the main grid lines and possibly a zero line with the specified painter.

This is a helper function called by draw.

void QCPGrid::drawSubGridLines ( QCPPainter painter) const
protected

Draws the sub grid lines with the specified painter.

This is a helper function called by draw.

QCPLayerable * QCPLayerable::parentLayerable ( ) const
inlineinherited

Returns the parent layerable of this layerable. The parent layerable is used to provide visibility hierarchies in conjunction with the method realVisibility. This way, layerables only get drawn if their parent layerables are visible, too.

Note that a parent layerable is not necessarily also the QObject parent for memory management. Further, a layerable doesn't always have a parent layerable, so this function may return 0.

A parent layerable is set implicitly with when placed inside layout elements and doesn't need to be set manually by the user.

void QCPLayerable::setVisible ( bool  on)
inherited

Sets the visibility of this layerable object. If an object is not visible, it will not be drawn on the QCustomPlot surface, and user interaction with it (e.g. click and selection) is not possible.

bool QCPLayerable::setLayer ( QCPLayer layer)
inherited

Sets the layer of this layerable object. The object will be placed on top of the other objects already on layer.

Returns true on success, i.e. if layer is a valid layer.

bool QCPLayerable::setLayer ( const QString &  layerName)
inherited

This is an overloaded function.

Sets the layer of this layerable object by name

Returns true on success, i.e. if layerName is a valid layer name.

void QCPLayerable::setAntialiased ( bool  enabled)
inherited

Sets whether this object will be drawn antialiased or not.

Note that antialiasing settings may be overridden by QCustomPlot::setAntialiasedElements and QCustomPlot::setNotAntialiasedElements.

double QCPLayerable::selectTest ( const QPointF &  pos,
bool  onlySelectable,
QVariant *  details = 0 
) const
virtualinherited

This function is used to decide whether a click hits a layerable object or not.

pos is a point in pixel coordinates on the QCustomPlot surface. This function returns the shortest pixel distance of this point to the object. If the object is either invisible or the distance couldn't be determined, -1.0 is returned. Further, if onlySelectable is true and the object is not selectable, -1.0 is returned, too.

If the item is represented not by single lines but by an area like QCPItemRect or QCPItemText, a click inside the area returns a constant value greater zero (typically the selectionTolerance of the parent QCustomPlot multiplied by 0.99). If the click lies outside the area, this function returns -1.0.

Providing a constant value for area objects allows selecting line objects even when they are obscured by such area objects, by clicking close to the lines (i.e. closer than 0.99*selectionTolerance).

The actual setting of the selection state is not done by this function. This is handled by the parent QCustomPlot when the mouseReleaseEvent occurs, and the finally selected object is notified via the selectEvent/deselectEvent methods.

details is an optional output parameter. Every layerable subclass may place any information in details. This information will be passed to selectEvent when the parent QCustomPlot decides on the basis of this selectTest call, that the object was successfully selected. The subsequent call to selectEvent will carry the details. This is useful for multi-part objects (like QCPAxis). This way, a possibly complex calculation to decide which part was clicked is only done once in selectTest. The result (i.e. the actually clicked part) can then be placed in details. So in the subsequent selectEvent, the decision which part was selected doesn't have to be done a second time for a single selection operation.

You may pass 0 as details to indicate that you are not interested in those selection details.

See Also
selectEvent, deselectEvent, QCustomPlot::setInteractions

Reimplemented in QCPAxis, QCPLayoutInset, QCPLegend, QCPAbstractItem, QCPGraph, QCPLayoutElement, QCPCurve, QCPBars, QCPStatisticalBox, QCPItemTracer, QCPItemText, QCPAbstractPlottable, QCPAbstractLegendItem, QCPPlotTitle, QCPItemBracket, QCPItemPixmap, QCPItemCurve, QCPItemLine, QCPItemEllipse, QCPItemRect, and QCPItemStraightLine.

bool QCPLayerable::realVisibility ( ) const
inherited

Returns whether this layerable is visible, taking possible direct layerable parent visibility into account. This is the method that is consulted to decide whether a layerable shall be drawn or not.

If this layerable has a direct layerable parent (usually set via hierarchies implemented in subclasses, like in the case of QCPLayoutElement), this function returns true only if this layerable has its visibility set to true and the parent layerable's realVisibility returns true.

If this layerable doesn't have a direct layerable parent, returns the state of this layerable's visibility.

void QCPLayerable::parentPlotInitialized ( QCustomPlot parentPlot)
protectedvirtualinherited

This function is called by initializeParentPlot, to allow subclasses to react on the setting of a parent plot. This is the case when 0 was passed as parent plot in the constructor, and the parent plot is set at a later time.

For example, QCPLayoutElement/QCPLayout hierarchies may be created independently of any QCustomPlot at first. When they are then added to a layout inside the QCustomPlot, the top level element of the hierarchy gets its parent plot initialized with initializeParentPlot. To propagate the parent plot to all the children of the hierarchy, the top level element then uses this function to pass the parent plot on to its child elements.

The default implementation does nothing.

See Also
initializeParentPlot

Reimplemented in QCPLegend, and QCPLayoutElement.

QCP::Interaction QCPLayerable::selectionCategory ( ) const
protectedvirtualinherited

Returns the selection category this layerable shall belong to. The selection category is used in conjunction with QCustomPlot::setInteractions to control which objects are selectable and which aren't.

Subclasses that don't fit any of the normal QCP::Interaction values can use QCP::iSelectOther. This is what the default implementation returns.

See Also
QCustomPlot::setInteractions

Reimplemented in QCPAxis, QCPLegend, QCPAbstractItem, QCPAbstractPlottable, and QCPAbstractLegendItem.

QRect QCPLayerable::clipRect ( ) const
protectedvirtualinherited

Returns the clipping rectangle of this layerable object. By default, this is the viewport of the parent QCustomPlot. Specific subclasses may reimplement this function to provide different clipping rects.

The returned clipping rect is set on the painter before the draw function of the respective object is called.

Reimplemented in QCPAbstractItem, QCPAbstractPlottable, and QCPAbstractLegendItem.

void QCPLayerable::selectEvent ( QMouseEvent *  event,
bool  additive,
const QVariant &  details,
bool *  selectionStateChanged 
)
protectedvirtualinherited

This event is called when the layerable shall be selected, as a consequence of a click by the user. Subclasses should react to it by setting their selection state appropriately. The default implementation does nothing.

event is the mouse event that caused the selection. additive indicates, whether the user was holding the multi-select-modifier while performing the selection (see QCustomPlot::setMultiSelectModifier). if additive is true, the selection state must be toggled (i.e. become selected when unselected and unselected when selected).

Every selectEvent is preceded by a call to selectTest, which has returned positively (i.e. returned a value greater than 0 and less than the selection tolerance of the parent QCustomPlot). The details data you output from selectTest is feeded back via details here. You may use it to transport any kind of information from the selectTest to the possibly subsequent selectEvent. Usually details is used to transfer which part was clicked, if it is a layerable that has multiple individually selectable parts (like QCPAxis). This way selectEvent doesn't need to do the calculation again to find out which part was actually clicked.

selectionStateChanged is an output parameter. If the pointer is non-null, this function must set the value either to true or false, depending on whether the selection state of this layerable was actually changed. For layerables that only are selectable as a whole and not in parts, this is simple: if additive is true, selectionStateChanged must also be set to true, because the selection toggles. If additive is false, selectionStateChanged is only set to true, if the layerable was previously unselected and now is switched to the selected state.

See Also
selectTest, deselectEvent

Reimplemented in QCPAxis, QCPLegend, QCPAbstractItem, QCPAbstractPlottable, QCPPlotTitle, and QCPAbstractLegendItem.

void QCPLayerable::deselectEvent ( bool *  selectionStateChanged)
protectedvirtualinherited

This event is called when the layerable shall be deselected, either as consequence of a user interaction or a call to QCustomPlot::deselectAll. Subclasses should react to it by unsetting their selection appropriately.

just as in selectEvent, the output parameter selectionStateChanged (if non-null), must return true or false when the selection state of this layerable has changed or not changed, respectively.

See Also
selectTest, selectEvent

Reimplemented in QCPAxis, QCPLegend, QCPAbstractItem, QCPAbstractPlottable, QCPPlotTitle, and QCPAbstractLegendItem.

void QCPLayerable::initializeParentPlot ( QCustomPlot parentPlot)
protectedinherited

Sets the parent plot of this layerable. Use this function once to set the parent plot if you have passed 0 in the constructor. It can not be used to move a layerable from one QCustomPlot to another one.

Note that, unlike when passing a non-null parent plot in the constructor, this function does not make parentPlot the QObject-parent of this layerable. If you want this, call QObject::setParent(parentPlot) in addition to this function.

Further, you will probably want to set a layer (setLayer) after calling this function, to make the layerable appear on the QCustomPlot.

The parent plot change will be propagated to subclasses via a call to parentPlotInitialized so they can react accordingly (e.g. also initialize the parent plot of child layerables, like QCPLayout does).

void QCPLayerable::setParentLayerable ( QCPLayerable parentLayerable)
protectedinherited

Sets the parent layerable of this layerable to parentLayerable. Note that parentLayerable does not become the QObject-parent (for memory management) of this layerable.

The parent layerable has influence on the return value of the realVisibility method. Only layerables with a fully visible parent tree will return true for realVisibility, and thus be drawn.

See Also
realVisibility
bool QCPLayerable::moveToLayer ( QCPLayer layer,
bool  prepend 
)
protectedinherited

Moves this layerable object to layer. If prepend is true, this object will be prepended to the new layer's list, i.e. it will be drawn below the objects already on the layer. If it is false, the object will be appended.

Returns true on success, i.e. if layer is a valid layer.

void QCPLayerable::applyAntialiasingHint ( QCPPainter painter,
bool  localAntialiased,
QCP::AntialiasedElement  overrideElement 
) const
protectedinherited

Sets the QCPainter::setAntialiasing state on the provided painter, depending on the localAntialiased value as well as the overrides QCustomPlot::setAntialiasedElements and QCustomPlot::setNotAntialiasedElements. Which override enum this function takes into account is controlled via overrideElement.


The documentation for this class was generated from the following files: