improved documentation

This commit is contained in:
Jan W. Krieger 2019-01-28 22:14:27 +01:00
parent c5b9504189
commit 73bf9edd95
7 changed files with 337 additions and 129 deletions

View File

@ -2462,6 +2462,42 @@ bool JKQTBasePlotter::isEmittingPlotSignalsEnabled() const
return this->emitPlotSignals; return this->emitPlotSignals;
} }
void JKQTBasePlotter::setGridPrinting(bool __value)
{
this->gridPrinting = __value;
}
bool JKQTBasePlotter::getGridPrinting() const
{
return this->gridPrinting;
}
void JKQTBasePlotter::setGridPrintingCurrentX(size_t __value)
{
this->gridPrintingCurrentX = __value;
}
size_t JKQTBasePlotter::getGridPrintingCurrentX() const
{
return this->gridPrintingCurrentX;
}
void JKQTBasePlotter::setGridPrintingCurrentY(size_t __value)
{
this->gridPrintingCurrentY = __value;
}
size_t JKQTBasePlotter::getGridPrintingCurrentY() const
{
return this->gridPrintingCurrentY;
}
void JKQTBasePlotter::setGridPrintingCurrentPos(size_t x, size_t y)
{
gridPrintingCurrentX=x;
gridPrintingCurrentY=y;
}
void JKQTBasePlotter::registerAdditionalAction(const QString &key, QAction *act) void JKQTBasePlotter::registerAdditionalAction(const QString &key, QAction *act)
{ {
if (!lstAdditionalPlotterActions.contains(key)) { if (!lstAdditionalPlotterActions.contains(key)) {

View File

@ -144,7 +144,8 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* may be used to set the axis properties. * may be used to set the axis properties.
* *
* *
* \section jkqtplotter_base_key Graph Keys * \section jkqtbaseplotter_appearance_and_style Appearance & Styling of the Graph
* \subsection jkqtplotter_base_key Graph Keys
* This class provides means to plot a key together with the functions. The plotting is only partially implemented in this base class, and has to be * This class provides means to plot a key together with the functions. The plotting is only partially implemented in this base class, and has to be
* implemented by child classes, as no graph management, that could provide a title for a specific graph, is implemented here. Key Plotting is * implemented by child classes, as no graph management, that could provide a title for a specific graph, is implemented here. Key Plotting is
* performed in the plotKey() method. This method basically draws a frame and background and then calls plotKeyContent() to draw the actual contents. * performed in the plotKey() method. This method basically draws a frame and background and then calls plotKeyContent() to draw the actual contents.
@ -165,43 +166,7 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* key content. By default this feature is switched ON. * key content. By default this feature is switched ON.
* *
* *
* \section jkqtplotter_base_saveprint Saving and Printing Graphs * \subsection jkqtplotter_base_aspectratios Aspect Ratios
* This class implement a set of function to save and print the graphs:
* - print() prints the graph on a QPrinter object
* - saveAsPixelImage() saves the plot into a pixel image file (PNG, TIFF, ... formats, as supported by Qt)
* - saveAsPDF() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsPS() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsSVG() saves the graph as a SVG file (using the Qt SVG library)
* - saveAsCSV() saves the data of the plot as comma separated values
* - saveAsSYLK() saves the data of the plot as SYLK spreadsheet
* - saveAsDIF() saves the data of the plot as data interchange format file
* .
*
* As one often want's to combine different graphs, there is a possibility to combine this graph with more other graphs.
* To do so one can think of the graphs to be part of a grid where each graph is contained in one cell. By default this
* mechanism is deactivated. You can activate it by calling setGridPrinting(true). Then you can set the position of the
* current graph by calling setGridPrintingCurrentX() and setGridPrintingCurrentY(). Add additional graphs by calling
* addGridPrintingPlotter(). The position of the current graph is 0,0 by default. Afterwards the save and print routines
* will export/print all graphs, not just the current one. There will be no additional border between the graphs, as the
* class expects the internal graph borders to be sufficient.
*
*
* \section jkqtplotter_base_defaultvalues Default Properties
* The plot is configured by a huge set of properties. For each property there is also a second protected variable which
* contains its default value. This way it is possible to store only those parameters in an INI file which have changed with
* respect to the default values. If the property is ( \copybrief is )called \c property then the according default value is stored in
* \c default_property. To reduce the code to be entered you can use the JKQTPPROPERTY() macro.
*
* Default values are available only for properties that control the appearance of the graphs (line widths, border widths,
* color, fonts ...), not the type of the graph (xmin, xmax, logXAxis, ...)
*
* \section jkqtplotter_base_userprops User Properties
* There is a subset of options that describe how the user interacted with the plotter (export/print scaling factors etc, save directories,
* other export settings, ...). These are not stored/loaded using saveSettings() and loadSettings(), but using saveUserSettings() and loadUserSettings().
* These methods MAY (strictly optional and turned off by default) be called by saveSettings() and loadSettings(), if the property userSettigsFilename ( \copybrief userSettigsFilename )is
* set (not-empty). In this case the suer settings are stored/loaded also everytime they are changed by the user or programmatically.
*
* \section jkqtplotter_base_aspectratios Aspect Ratios
* First note that this functionality is only available and activated if both axes are linear! * First note that this functionality is only available and activated if both axes are linear!
* *
* You can set two different aspect ratios: * You can set two different aspect ratios:
@ -215,6 +180,66 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* setAxisAspectRatio(4.0*getAspectRatio()); * setAxisAspectRatio(4.0*getAspectRatio());
* \endcode * \endcode
* . * .
*
*
* \section jkqtbaseplotter_dataexport_print Printing, Saving & Exporting
*
* \subsection jkqtplotter_base_saveprint Saving and Printing Graphs
* This class implement a set of function to save and print the graphs:
* - print() prints the graph on a QPrinter object
* - saveAsPixelImage() saves the plot into a pixel image file (PNG, TIFF, ... formats, as supported by Qt)
* - saveAsPDF() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsPS() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsSVG() saves the graph as a SVG file (using the Qt SVG library)
* - saveImage() saves the graph
* .
* You can also copy the contents of the plot into the clipboard:
* - copyPixelImage()
* .
*
* \subsection jkqtplotter_base_dataexport Exporting Graph Data
* This class implement a set of function to save the data of the graphs:
* - saveData() saves the data of the plot
* - saveAsCSV() saves the data of the plot as comma separated values
* - saveAsSYLK() saves the data of the plot as SYLK spreadsheet
* - saveAsDIF() saves the data of the plot as data interchange format file
* - saveAsMatlab() saves the data of the plot as a CSV file suitable for Matlab
* - saveAsSemicolonSV() saves the data of the plot as a Semicolon Separated Values (SSV)
* - saveAsTabSV() saves the data of the plot as a Tabulator Separated Values (CSV) file
* - saveAsGerExcelCSV() saves the data of the plot as a Text file (SSV) suitable for german excel, i.e. with comma as decimal separator
* .
* You can also copy the graphs' data into the clipboard:
* - copyData()
* - copyDataMatlab()
* .
*
*
* \subsection JKQTBASEPLOTTER_GRIDPRINTING Grid-Printing / Layouting Several Graphs
* As one often want's to combine different graphs, there is a possibility to combine this graph with more other graphs.
* To do so one can think of the graphs to be part of a grid where each graph is contained in one cell. By default this
* mechanism is deactivated. You can activate it by calling setGridPrinting(true). Then you can set the position of the
* current graph by calling setGridPrintingCurrentX() and setGridPrintingCurrentY(). Add additional graphs by calling
* addGridPrintingPlotter(). The position of the current graph is 0,0 by default. Afterwards the save and print routines
* will export/print all graphs, not just the current one. There will be no additional border between the graphs, as the
* class expects the internal graph borders to be sufficient.
*
* \see \ref JKQTPLOTTER_SYNCMULTIPLOT
*
*
* \section jkqtplotter_base_defaultvalues Default Properties
* The plot is configured by a huge set of properties. For each property there is also a second protected variable which
* contains its default value. This way it is possible to store only those parameters in an INI file which have changed with
* respect to the default values. If the property is called \c property then the according default value is stored in
* \c default_property. To reduce the code to be entered you can use the JKQTPPROPERTY() macro.
*
* Default values are available only for properties that control the appearance of the graphs (line widths, border widths,
* color, fonts ...), not the type of the graph (xmin, xmax, logXAxis, ...)
*
* \section jkqtplotter_base_userprops User Properties
* There is a subset of options that describe how the user interacted with the plotter (export/print scaling factors etc, save directories,
* other export settings, ...). These are not stored/loaded using saveSettings() and loadSettings(), but using saveUserSettings() and loadUserSettings().
* These methods MAY (strictly optional and turned off by default) be called by saveSettings() and loadSettings(), if the property userSettigsFilename ( \copybrief userSettigsFilename )is
* set (not-empty). In this case the suer settings are stored/loaded also everytime they are changed by the user or programmatically.
*/ */
class LIB_EXPORT JKQTBasePlotter: public QObject { class LIB_EXPORT JKQTBasePlotter: public QObject {
Q_OBJECT Q_OBJECT
@ -1740,45 +1765,36 @@ class LIB_EXPORT JKQTBasePlotter: public QObject {
/*! \brief sets the property gridPrinting ( \copybrief gridPrinting ) to the specified \a __value. /*! \brief sets the property gridPrinting ( \copybrief gridPrinting ) to the specified \a __value.
\details Description of the parameter gridPrinting is: <BLOCKQUOTE>\copydoc gridPrinting </BLOCKQUOTE> \details Description of the parameter gridPrinting is: <BLOCKQUOTE>\copydoc gridPrinting </BLOCKQUOTE>
\see gridPrinting for more information */ \see gridPrinting for more information */
inline void setGridPrinting(bool __value) void setGridPrinting(bool __value);
{
this->gridPrinting = __value;
}
/*! \brief returns the property gridPrinting ( \copybrief gridPrinting ). /*! \brief returns the property gridPrinting ( \copybrief gridPrinting ).
\details Description of the parameter gridPrinting is: <BLOCKQUOTE>\copydoc gridPrinting </BLOCKQUOTE> \details Description of the parameter gridPrinting is: <BLOCKQUOTE>\copydoc gridPrinting </BLOCKQUOTE>
\see gridPrinting for more information */ \see gridPrinting for more information */
inline bool getGridPrinting() const bool getGridPrinting() const;
{
return this->gridPrinting;
}
/*! \brief sets the property gridPrintingCurrentX ( \copybrief gridPrintingCurrentX ) to the specified \a __value. /*! \brief sets the property gridPrintingCurrentX ( \copybrief gridPrintingCurrentX ) to the specified \a __value.
\details Description of the parameter gridPrintingCurrentX is: <BLOCKQUOTE>\copydoc gridPrintingCurrentX </BLOCKQUOTE> \details Description of the parameter gridPrintingCurrentX is: <BLOCKQUOTE>\copydoc gridPrintingCurrentX </BLOCKQUOTE>
\see gridPrintingCurrentX for more information */ \see gridPrintingCurrentX for more information */
inline void setGridPrintingCurrentX(size_t __value) void setGridPrintingCurrentX(size_t __value);
{
this->gridPrintingCurrentX = __value;
}
/*! \brief returns the property gridPrintingCurrentX ( \copybrief gridPrintingCurrentX ). /*! \brief returns the property gridPrintingCurrentX ( \copybrief gridPrintingCurrentX ).
\details Description of the parameter gridPrintingCurrentX is: <BLOCKQUOTE>\copydoc gridPrintingCurrentX </BLOCKQUOTE> \details Description of the parameter gridPrintingCurrentX is: <BLOCKQUOTE>\copydoc gridPrintingCurrentX </BLOCKQUOTE>
\see gridPrintingCurrentX for more information */ \see gridPrintingCurrentX for more information */
inline size_t getGridPrintingCurrentX() const size_t getGridPrintingCurrentX() const;
{
return this->gridPrintingCurrentX;
}
/*! \brief sets the property gridPrintingCurrentY ( \copybrief gridPrintingCurrentY ) to the specified \a __value. /*! \brief sets the property gridPrintingCurrentY ( \copybrief gridPrintingCurrentY ) to the specified \a __value.
\details Description of the parameter gridPrintingCurrentY is: <BLOCKQUOTE>\copydoc gridPrintingCurrentY </BLOCKQUOTE> \details Description of the parameter gridPrintingCurrentY is: <BLOCKQUOTE>\copydoc gridPrintingCurrentY </BLOCKQUOTE>
\see gridPrintingCurrentY for more information */ \see gridPrintingCurrentY for more information */
inline void setGridPrintingCurrentY(size_t __value) void setGridPrintingCurrentY(size_t __value);
{
this->gridPrintingCurrentY = __value;
}
/*! \brief returns the property gridPrintingCurrentY ( \copybrief gridPrintingCurrentY ). /*! \brief returns the property gridPrintingCurrentY ( \copybrief gridPrintingCurrentY ).
\details Description of the parameter gridPrintingCurrentY is: <BLOCKQUOTE>\copydoc gridPrintingCurrentY </BLOCKQUOTE> \details Description of the parameter gridPrintingCurrentY is: <BLOCKQUOTE>\copydoc gridPrintingCurrentY </BLOCKQUOTE>
\see gridPrintingCurrentY for more information */ \see gridPrintingCurrentY for more information */
inline size_t getGridPrintingCurrentY() const size_t getGridPrintingCurrentY() const;
{
return this->gridPrintingCurrentY; /** \brief set the x- and y-positions of this JKQTPlotter in the grid-printing grid
} *
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentX(), setGridPrintingCurrentY() \ref JKQTPBASELOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentPos(size_t x, size_t y);
/*! \brief sets the property currentSaveDirectory ( \copybrief currentSaveDirectory ) to the specified \a __value. /*! \brief sets the property currentSaveDirectory ( \copybrief currentSaveDirectory ) to the specified \a __value.
\details Description of the parameter currentSaveDirectory is: <BLOCKQUOTE>\copydoc currentSaveDirectory </BLOCKQUOTE> \details Description of the parameter currentSaveDirectory is: <BLOCKQUOTE>\copydoc currentSaveDirectory </BLOCKQUOTE>
\see currentSaveDirectory for more information */ \see currentSaveDirectory for more information */

View File

@ -254,7 +254,14 @@ class LIB_EXPORT JKQTPXYLineGraph: public JKQTPXYGraph {
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
set the properties sizeColumn and/or colorColumn to change the size and/or color of the symbols according to the values in the column. set the properties sizeColumn and/or colorColumn to change the size and/or color of the symbols according to the values in the column.
*/
\image html jkqtplotter_simpletest_paramscatterplot.png "Different Styles of Parametrized Scatter/Line Graphs"
\image html jkqtplotter_simpletest_paramscatterplot_image_star.png "JKQTPXYParametrizedScatterGraph with symbols organized in a grid"
\see JKQTPXYParametrizedErrorScatterGraph, \ref JKQTPlotterParamScatter , \ref JKQTPlotterParamScatterImage
*/
class LIB_EXPORT JKQTPXYParametrizedScatterGraph: public JKQTPXYLineGraph, public JKQTPColorPaletteTools { class LIB_EXPORT JKQTPXYParametrizedScatterGraph: public JKQTPXYLineGraph, public JKQTPColorPaletteTools {
Q_OBJECT Q_OBJECT
public: public:
@ -516,6 +523,10 @@ class LIB_EXPORT JKQTPXYLineErrorGraph: public JKQTPXYLineGraph, public JKQTPXYG
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
set the properties sizeColumn and/or colorColumn to change the size and/or color of the symbols according to the values in the column. set the properties sizeColumn and/or colorColumn to change the size and/or color of the symbols according to the values in the column.
\image html screen_parmetrizedplots_datatable.png
\see JKQTPXYParametrizedScatterGraph, \ref JKQTPlotterParamScatter
*/ */
class LIB_EXPORT JKQTPXYParametrizedErrorScatterGraph: public JKQTPXYParametrizedScatterGraph, public JKQTPXYGraphErrors { class LIB_EXPORT JKQTPXYParametrizedErrorScatterGraph: public JKQTPXYParametrizedScatterGraph, public JKQTPXYGraphErrors {
Q_OBJECT Q_OBJECT
@ -553,21 +564,9 @@ class LIB_EXPORT JKQTPXYParametrizedErrorScatterGraph: public JKQTPXYParametrize
/*! \brief This implements a step plot with values \f$ \left(x, f(x) \right) \f$ /*! \brief This implements a step plot with values \f$ \left(x, f(x) \right) \f$
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
A step plot starts at \f$ \left(x_{i-1}, f(x_{i-1})\right) \f$ and then goes on to \image html jkqtplotter_simpletest_stepplots.png
\f$ \left(x_{i}, f(x_{i-1})\right) \f$. There it raises immediately to
\f$ \left(x_i, f(x_i)\right) \f$.
If you want the \f$ x_i \f$ values in the center of the steps, use \see JKQTPStepVerticalGraph, \ref JKQTPlotterStepPlot
\code JKQTPStepHorizontalGraph::setXCentered(true) \endcode . In that case the steps
go from \f$ \left(x_{i-1}, f(x_{i-1})\right) \f$ to \f$ \left(x_{i}-\delta/2, f(x_{i-1})\right) \f$ ,
then to \f$ \left(x_{i}-\delta/2, f(x_{i})\right) \f$ and finally
to \f$ \left(x_{i}, f(x_{i})\right) \f$ where \f$ \delta=(x_{i}-x_{i-1}) \f$ .
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setValuesCentered(false) \endcode :
\image html plot_stephorplot1.png
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setValuesCentered(true) \endcode :
\image html plot_stephorplot2.png
*/ */
class LIB_EXPORT JKQTPStepHorizontalGraph: public JKQTPXYGraph { class LIB_EXPORT JKQTPStepHorizontalGraph: public JKQTPXYGraph {
Q_OBJECT Q_OBJECT
@ -726,21 +725,9 @@ class LIB_EXPORT JKQTPStepHorizontalGraph: public JKQTPXYGraph {
/*! \brief This implements a step plot with values \f$ \left(f(y), y \right) \f$ /*! \brief This implements a step plot with values \f$ \left(f(y), y \right) \f$
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
A step plot starts at \f$ \left(f(y_{i-1}), x_{i-1}\right) \f$ and then goes on to
\f$ \left(f(y_{i-1}), y_{i}\right) \f$. There it raises immediately to
\f$ \left(f(y_i), y_i\right) \f$.
If you want the \f$ y_i \f$ values in the center of the steps, use
\code JKQTPStepHorizontalGraph::setValuesCentered(true) \endcode . In that case the steps
go from \f$ \left(f(y_{i-1}), y_{i-1})\right) \f$ to \f$ \left(f(y_{i-1}), y_{i}-\delta/2\right) \f$ ,
then to \f$ \left(f(y_{i}, y_{i}-\delta/2\right) \f$ and finally
to \f$ \left(f(y_{i}), y_{i}\right) \f$ where \f$ \delta=(y_{i}-y_{i-1}) \f$ .
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setXCentered(false) \endcode :
\image html plot_stepverplot1.png \image html plot_stepverplot1.png
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setXCentered(true) \endcode : \see JKQTPStepHorizontalGraph, \ref JKQTPlotterStepPlot
\image html plot_stepverplot2.png
*/ */
class LIB_EXPORT JKQTPStepVerticalGraph: public JKQTPStepHorizontalGraph { class LIB_EXPORT JKQTPStepVerticalGraph: public JKQTPStepHorizontalGraph {
Q_OBJECT Q_OBJECT

View File

@ -31,7 +31,9 @@
/*! \brief This implements filled curve plots where the area is filled between the plot line and the x-Axis. /*! \brief This implements filled curve plots where the area is filled between the plot line and the x-Axis.
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurvexerrorplots.png \image html jkqtplotter_simpletest_filledgraphs.png
\see \ref JKQTPlotterFilledGraphs
*/ */
class LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPXYGraph { class LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPXYGraph {
Q_OBJECT Q_OBJECT
@ -211,6 +213,9 @@ class LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPXYGraph {
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurvexerrorplots.png \image html plot_filledcurvexerrorplots.png
\see \ref JKQTPlotterFilledGraphs
*/ */
class LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurveXGraph, public JKQTPYGraphErrors { class LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurveXGraph, public JKQTPYGraphErrors {
Q_OBJECT Q_OBJECT
@ -236,7 +241,10 @@ class LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurveXGraph, pub
/*! \brief This implements filled curve plots where the area is filled between the plot line and y-Axis /*! \brief This implements filled curve plots where the area is filled between the plot line and y-Axis
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurvexplots.png \image html jkqtplotter_simpletest_filledgraphs_yaxis.png
\see \ref JKQTPlotterFilledGraphs
*/ */
class LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveXGraph { class LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveXGraph {
Q_OBJECT Q_OBJECT
@ -256,6 +264,8 @@ class LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveXGraph {
\ingroup jkqtplotter_linesymbolgraphs \ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurveyerrorplots.png \image html plot_filledcurveyerrorplots.png
\see \ref JKQTPlotterFilledGraphs
*/ */
class LIB_EXPORT JKQTPFilledCurveYErrorGraph: public JKQTPFilledCurveYGraph, public JKQTPXGraphErrors { class LIB_EXPORT JKQTPFilledCurveYErrorGraph: public JKQTPFilledCurveYGraph, public JKQTPXGraphErrors {
Q_OBJECT Q_OBJECT
@ -286,6 +296,10 @@ class LIB_EXPORT JKQTPFilledCurveYErrorGraph: public JKQTPFilledCurveYGraph, pub
With setDrawlines(true): With setDrawlines(true):
\image html JKQTPFilledVerticalRangeGraph_WithLines.png \image html JKQTPFilledVerticalRangeGraph_WithLines.png
\see \ref JKQTPlotterDateTimeAxes
*/ */
class LIB_EXPORT JKQTPFilledVerticalRangeGraph: public JKQTPXYGraph { class LIB_EXPORT JKQTPFilledVerticalRangeGraph: public JKQTPXYGraph {
Q_OBJECT Q_OBJECT

View File

@ -347,7 +347,7 @@ class LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
/*! \brief class to plot an image from a QImage object /*! \brief class to plot an image from a QImage object
\ingroup jkqtplotter_imagelots_elements \ingroup jkqtplotter_imagelots_elements
\image html jkqtplotter_simpletest_rgbimageplot_qt \image html jkqtplotter_simpletest_rgbimageplot_qt.png
*/ */
class LIB_EXPORT JKQTPImage: public JKQTPImageBase { class LIB_EXPORT JKQTPImage: public JKQTPImageBase {
Q_OBJECT Q_OBJECT

View File

@ -892,11 +892,11 @@ void JKQTPlotter::masterPlotScalingRecalculated() {
} }
} }
void JKQTPlotter::synchronizeToMaster(JKQTPlotter* master, bool synchronizeWidth, bool synchronizeHeight) { void JKQTPlotter::synchronizeToMaster(JKQTPlotter* master, bool synchronizeWidth, bool synchronizeHeight, bool synchronizeZoomingMasterToSlave, bool synchronizeZoomingSlaveToMaster) {
if (!master) { if (!master) {
resetMasterSynchronization(); resetMasterSynchronization();
} }
plotter->synchronizeToMaster(master->getPlotter(), synchronizeWidth, synchronizeHeight); plotter->synchronizeToMaster(master->getPlotter(), synchronizeWidth, synchronizeHeight, synchronizeZoomingMasterToSlave, synchronizeZoomingSlaveToMaster);
masterPlotter=master; masterPlotter=master;
if (masterPlotter) connect(masterPlotter->getPlotter(), SIGNAL(plotScalingRecalculated()), this, SLOT(masterPlotScalingRecalculated())); if (masterPlotter) connect(masterPlotter->getPlotter(), SIGNAL(plotScalingRecalculated()), this, SLOT(masterPlotScalingRecalculated()));
redrawPlot(); redrawPlot();
@ -908,6 +908,36 @@ void JKQTPlotter::resetMasterSynchronization() {
redrawPlot(); redrawPlot();
} }
void JKQTPlotter::setGridPrinting(bool enabled)
{
plotter->setGridPrinting(enabled);
}
void JKQTPlotter::addGridPrintingPlotter(size_t x, size_t y, JKQTPlotter *plotterOther)
{
plotter->addGridPrintingPlotter(x,y,plotterOther->getPlotter());
}
void JKQTPlotter::clearGridPrintingPlotters()
{
plotter->clearGridPrintingPlotters();
}
void JKQTPlotter::setGridPrintingCurrentX(size_t x)
{
plotter->setGridPrintingCurrentX(x);
}
void JKQTPlotter::setGridPrintingCurrentY(size_t y)
{
plotter->setGridPrintingCurrentY(y);
}
void JKQTPlotter::setGridPrintingCurrentPos(size_t x, size_t y)
{
plotter->setGridPrintingCurrentPos(x,y);
}
bool JKQTPlotter::isPlotUpdateEnabled() const { bool JKQTPlotter::isPlotUpdateEnabled() const {
return doDrawing; return doDrawing;
} }

View File

@ -62,18 +62,79 @@ LIB_EXPORT void initJKQTPlotterResources();
/** \brief plotter widget for scientific plots (uses JKQTBasePlotter to do the actual drawing) /** \brief plotter widget for scientific plots (uses JKQTBasePlotter to do the actual drawing)
* \ingroup jkqtpplotterclasses * \ingroup jkqtpplotterclasses
* *
* This class is an implementation of JKQTBasePlotter. It uses the tools from this base class * This class is a QWidget-wrapper around JKQTBasePlotter. It uses the tools from JKQTBasePlotter
* to display function graphs that use the internal datastore as data source. This class mostly * to display scientific plots. This class mostly adds the Widget for the output and adds different
* adds the Widget for the output and adds different types of user interactions. * types of user interactions.
* *
* <b>Please have a look at the documentation of JKQTBasePlotter for details on the management of graphs * <b>Please have a look at the documentation of JKQTBasePlotter for details on the management of graphs
* and the formating/styling of the plot and graphs!</b> * and the formating/styling of the plot and graphs!</b>
* *
* \see JKQTBasePlotter * The rest of this documentation ins split into sections that each treat a special topic, as outlines below:
*
* \tableofcontents
* *
* *
* \section JKQTPLOTTER_SYNCMULTIPLOT Synchronizing Several Plots
* *
* \section JKQTPLOTTER_USERINTERACTION User-Interactions * Often a single plot is not sufficient, but several plots need to be aligned with respect to each other:
*
* \image html test_multiplot.png
*
* This can be achieved by putting several JKQTPlotter instances into a
* <a href="http://doc.qt.io/qt-5/layout.html">Qt Layout</a>. Then you can fill each plot differently and
* set the x-/y-range of each plot by hand. This method works for simple cases, but has several drawbacks:
* - Due to the independent and automatic layouting of each plot, the axes do not need to be aligned properly
* - When you print the plot, the printing does not know about the layout and will only print one of the
* several plots in your layout.
* - when you zoom/pan in one of the plots (e.g. using the mouse), the other plots will not adapt their
* axes to match the new area, but especially in cases as in the image above it would be beneficial,
* that tha x-axis of the plot at the bottom follows the x-axis of the plot above etc.
* .
*
* To overcome these limitations, JKQTPlotter offers an API with which you can declare relations between
* different plots (one of them is made the master) and you can synchronize the axes of two plots, when
* zooming (also when calling e.g. zoomToFit() or setXY() ). This API is:
* - <b>Declaring the Relations (forwarding to JKQTBasePlotter !):</b>
* - synchronizeToMaster() / JKQTBasePlotter::synchronizeToMaster() synchronizes the parent JKQTPlotter with another JKQTPlotter. With two boolean-parameters
* you can specify the axes to be synchronized. E.g. in the case above, you would call:
* \code
* // synchronize width/x-axis of plotResid to width/x-axis of plotMain
* plotResid->synchronizeToMaster(plotMain, true, false, true, true);
*
* // synchronize y-axis of width/plotResidHist to y-axis of width/plotResid
* plotResidHist->synchronizeToMaster(plotResid, false, true, true, true);
* \endcode
* This will synchronize the x-axes of the top (\c plotMain ) and bottom-left plot (\c plotResid ),
* as well as the y-axes of the bottom-left (\c plotResid ) and bottom-right plot (\c plotResidHist ).
* After this call they will have the same size in screen pixels and always span the same range
* in plot coordinates.
* - resetMasterSynchronization() / JKQTBasePlotter::resetMasterSynchronization() deletes all synchronizations
* from the JKQTPlotter
* .
* - <b>Synchronizing Axes (forwarding to JKQTBasePlotter !):</b>
* - setGridPrinting() enables grid printing for this JKQTPlotter. If set to \c true , and you print afterwards,
* the printout (or export) will not only contain the plot itself, but also additional plots that were
* declared using addGridPrintingPlotter() (see below).
* - addGridPrintingPlotter() add a new plotter \a plotterOther for grid printing mode, at location \a x / \a y
* E.g. in the example shown above, you could call:
* \code
* plotMain->setGridPrinting(true);
* plotMain->addGridPrintingPlotter(0,1,plotResid);
* plotMain->addGridPrintingPlotter(1,1,plotResidHist);
* \endcode
* - clearGridPrintingPlotters() clear all additional plotters for grid printing mode
* .
* These two functionalities are kept separate, so you can use them independently.
*
* \note Note that the grid printing mode only allows to put plots to the right (positive x-values in addGridPrintingPlotter() )
* and to the bottom (positive y-values in addGridPrintingPlotter() ) of the current plot. Therefore the master plot
* needs to be the top-left plot of your grid and all plots need to be aligned in a grid (i.e. using
* <a href="http://doc.qt.io/qt-5/qgridlayout.html">QGridLayout</a>)
*
* \see See \ref JKQTPlotterMultiPlotLayout for an extensive example of the functionality.
*
*
* \section JKQTPLOTTER_USERINTERACTION User-Interactions/GUI Features
* *
* JKQTPlotter offers a lot of user-interaction features out of the box. These are detailed below. * JKQTPlotter offers a lot of user-interaction features out of the box. These are detailed below.
* *
@ -156,7 +217,18 @@ LIB_EXPORT void initJKQTPlotterResources();
* *
* \subsection JKQTPLOTTER_USERMOUSEINTERACTION Mouse-Interaction in JKQTPlotter * \subsection JKQTPLOTTER_USERMOUSEINTERACTION Mouse-Interaction in JKQTPlotter
* *
* \see \ref JKQTPlotterUserInteraction * This section summarizes all user-interaction functions in JKQTPlotter that somehow relate to the mouse.
* These are:
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSECLICK
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEWHEEL
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEMOVE
* .
*
* \note Zooming and Paning interactions apply to both axes when they are performed with the mouse
* inside the plot. They are limited to one of the two axes, when the mouse hovers over that axis
* (e.g. when you zoom by mouse-wheel while the mouse pointer is below the plot, over the x-axis,
* only the x-axis is affected by the operation).
* *
* \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG Actions When Dragging the Mouse * \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG Actions When Dragging the Mouse
* JKQTPlotter offers several methods that allow to customize, how it reacts to mouse actions: * JKQTPlotter offers several methods that allow to customize, how it reacts to mouse actions:
@ -175,7 +247,13 @@ LIB_EXPORT void initJKQTPlotterResources();
* *
* Pressing the \c ESC key will stop the current JKQTPlotter::MouseActionMode. * Pressing the \c ESC key will stop the current JKQTPlotter::MouseActionMode.
* *
* \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSECLICK Actions After Clicks on the Mouse Buttons * If e.g. the mode JKQTPlotter::MouseActionMode::ZoomRectangle is selected, while you drag the mouse, the
* zoom rectangle is drawn over the plot. You can modify the style of drawing using these functions:
* - setUserActionColor() sets the color of the drawn shape
* - setUserActionCompositionMode() specifies how to combine the shape with the existing plot
* .
*
* \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSECLICK Actions After (Double-)Clicks on the Mouse Buttons
* The right mouse button has a special role: If it is single-clicked and no JKQTPlotter::MouseActionMode is specified * The right mouse button has a special role: If it is single-clicked and no JKQTPlotter::MouseActionMode is specified
* for the vent, it opens the context menu, unless you call \c setContextMenuMoode(JKQTPlotter::NoContextMenu) . * for the vent, it opens the context menu, unless you call \c setContextMenuMoode(JKQTPlotter::NoContextMenu) .
* You can also use setContextMenuMoode() to specify which type of context menu is shown. See JKQTPlotter::ContextMenuModes * You can also use setContextMenuMoode() to specify which type of context menu is shown. See JKQTPlotter::ContextMenuModes
@ -222,6 +300,9 @@ LIB_EXPORT void initJKQTPlotterResources();
* In addition the signal plotMouseMove() is called whenever the mouse moves over the plot. * In addition the signal plotMouseMove() is called whenever the mouse moves over the plot.
* Additional signals may be emitted, depending on the currently active JKQTPlotter::MouseActionMode. * Additional signals may be emitted, depending on the currently active JKQTPlotter::MouseActionMode.
* *
* Also the current mouse position is shown above the graph by default (can be switched on or off
* using setMousePositionShown() ).
*
* *
* *
* \section JKQTPLOTTER_USEQTCREATOR How to use JKQTPlotter in the Qt Form Designer * \section JKQTPLOTTER_USEQTCREATOR How to use JKQTPlotter in the Qt Form Designer
@ -334,14 +415,10 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
\details Description of the parameter displayMousePosition is: <BLOCKQUOTE>\copydoc displayMousePosition </BLOCKQUOTE> \details Description of the parameter displayMousePosition is: <BLOCKQUOTE>\copydoc displayMousePosition </BLOCKQUOTE>
\see displayMousePosition for more information */ \see displayMousePosition for more information */
bool isMousePositionShown() const; bool isMousePositionShown() const;
/*! \brief returns the property userActionColor ( \copybrief userActionColor ). /** \brief returns the fill color of the zoom rectangle \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
\details Description of the parameter userActionColor is: <BLOCKQUOTE>\copydoc userActionColor </BLOCKQUOTE>
\see userActionColor for more information */
QColor getUserActionColor() const; QColor getUserActionColor() const;
/*! \brief returns the property userActionCompositionMode ( \copybrief userActionCompositionMode ). /** \brief returns the QPainter::CompositionMode used to draw the zoom rectangle etc. \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
\details Description of the parameter userActionCompositionMode is: <BLOCKQUOTE>\copydoc userActionCompositionMode </BLOCKQUOTE>
\see userActionCompositionMode for more information */
QPainter::CompositionMode getUserActionCompositionMode() const; QPainter::CompositionMode getUserActionCompositionMode() const;
@ -373,12 +450,64 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
\param master the plotter widget to synchronize to \param master the plotter widget to synchronize to
\param synchronizeWidth do you want the plot width to be synchronized? \param synchronizeWidth do you want the plot width to be synchronized?
\param synchronizeHeight do you want the plot height to be synchronized? \param synchronizeHeight do you want the plot height to be synchronized?
*/ \param synchronizeZoomingMasterToSlave if set, also zooming in the master leads to a modification of the linked axes in the slave
void synchronizeToMaster(JKQTPlotter* master, bool synchronizeWidth, bool synchronizeHeight); \param synchronizeZoomingSlaveToMaster if set, also zooming in the slave leads to a modification of the linked axes in the master
/** \brief switches any synchronization off, that has been created by synchronizeToMaster() */
\note This function internally calls JKQTBasePlotter::synchronizeToMaster()
\see synchronizeToMaster(), resetMasterSynchronization(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void synchronizeToMaster(JKQTBasePlotter* master, bool synchronizeWidth, bool synchronizeHeight, bool synchronizeZoomingMasterToSlave=false, bool synchronizeZoomingSlaveToMaster=false);
/** \brief switches any synchronization off, that has been created by synchronizeToMaster()
*
* \note This function internally calls JKQTBasePlotter::resetMasterSynchronization()
* \see synchronizeToMaster(), resetMasterSynchronization(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void resetMasterSynchronization(); void resetMasterSynchronization();
/*! \brief enables grid-printing for this plot
*
* \note This function call forwards to JKQTBasePlotter::setGridPrinting()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrinting(bool enabled);
/** \brief add a new plotter \a plotterOther for grid printing mode, at location \a x / \a y
*
* \note This function call forwards to JKQTBasePlotter::addGridPrintingPlotter()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void addGridPrintingPlotter(size_t x, size_t y, JKQTPlotter* plotterOther) ;
/** \brief clear all additional plotters for grid printing mode
*
* \note This function call forwards to JKQTBasePlotter::clearGridPrintingPlotters()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void clearGridPrintingPlotters() ;
/** \brief set the x-position of this JKQTPlotter in the grid-printing grid
*
* \note This function call forwards to JKQTBasePlotter::setGridPrintingCurrentX()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), setGridPrintingCurrentY(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentX(size_t x);
/** \brief set the y-position of this JKQTPlotter in the grid-printing grid
*
* \note This function call forwards to JKQTBasePlotter::setGridPrintingCurrentY()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), setGridPrintingCurrentX(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentY(size_t y);
/** \brief set the x- and y-positions of this JKQTPlotter in the grid-printing grid
*
* \note This function call forwards to JKQTBasePlotter::setGridPrintingCurrentPos()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentX(), setGridPrintingCurrentY() \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentPos(size_t x, size_t y);
/** \brief returns a pointer to the datastore used by this object */ /** \brief returns a pointer to the datastore used by this object */
inline JKQTPDatastore* getDatastore() { return plotter->getDatastore(); } inline JKQTPDatastore* getDatastore() { return plotter->getDatastore(); }
@ -434,11 +563,11 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
/** \brief clear all registered mouse double-click actions */ /** \brief clear all registered mouse double-click actions */
void clearAllRegisteredMouseDoubleClickActions(); void clearAllRegisteredMouseDoubleClickActions();
/** \brief specifies the action to perform on a mouse wheel event when a given modifier is pressed \see deregisterMouseWheelAction(), clearAllMouseWheelActions(), JKQTPLOTTER_USERMOUSEINTERACTION */ /** \brief specifies the action to perform on a mouse wheel event when a given modifier is pressed \see deregisterMouseWheelAction(), clearAllMouseWheelActions(), \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void registerMouseWheelAction(Qt::KeyboardModifier modifier, MouseWheelActions action); void registerMouseWheelAction(Qt::KeyboardModifier modifier, MouseWheelActions action);
/** \brief deletes all mouse-wheel actions registered for a given \a modifier \see registerMouseWheelAction(), clearAllMouseWheelActions(), JKQTPLOTTER_USERMOUSEINTERACTION */ /** \brief deletes all mouse-wheel actions registered for a given \a modifier \see registerMouseWheelAction(), clearAllMouseWheelActions(), \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void deregisterMouseWheelAction(Qt::KeyboardModifier modifier); void deregisterMouseWheelAction(Qt::KeyboardModifier modifier);
/** \brief deletes all mouse-wheel actions \see registerMouseWheelAction(), deregisterMouseWheelAction(), JKQTPLOTTER_USERMOUSEINTERACTION */ /** \brief deletes all mouse-wheel actions \see registerMouseWheelAction(), deregisterMouseWheelAction(), \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void clearAllMouseWheelActions(); void clearAllMouseWheelActions();
/*! \brief returns the currently set special context menu object */ /*! \brief returns the currently set special context menu object */
@ -557,7 +686,7 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
return getConstplotter()->getKeyFontSize(); return getConstplotter()->getKeyFontSize();
} }
/** \brief returns the currently set mode for the context menu \see ContextMenuModes, JKQTPLOTTER_USERMOUSEINTERACTION */ /** \brief returns the currently set mode for the context menu \see ContextMenuModes, \ref JKQTPLOTTER_USERMOUSEINTERACTION */
ContextMenuModes getContextMenuMode() const; ContextMenuModes getContextMenuMode() const;
@ -652,25 +781,21 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
void setToolbarAlwaysOn(bool __value); void setToolbarAlwaysOn(bool __value);
/*! \brief sets the property displayMousePosition ( \copybrief displayMousePosition ) to the specified \a __value. /*! \brief sets the property displayMousePosition ( \copybrief displayMousePosition ) to the specified \a __value.
\details Description of the parameter displayMousePosition is: <BLOCKQUOTE>\copydoc displayMousePosition </BLOCKQUOTE> \details Description of the parameter displayMousePosition is: <BLOCKQUOTE>\copydoc displayMousePosition </BLOCKQUOTE>
\see displayMousePosition for more information */ \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEMOVE */
void setMousePositionShown(bool __value); void setMousePositionShown(bool __value);
/*! \brief sets the property userActionColor ( \copybrief userActionColor ) to the specified \a __value. /** \brief set the fill color of the zoom rectangle \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
\details Description of the parameter userActionColor is: <BLOCKQUOTE>\copydoc userActionColor </BLOCKQUOTE>
\see userActionColor for more information */
void setUserActionColor(const QColor & __value); void setUserActionColor(const QColor & __value);
/*! \brief sets the property userActionCompositionMode ( \copybrief userActionCompositionMode ) to the specified \a __value. /** \brief set the QPainter::CompositionMode used to draw the zoom rectangle etc. \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
\details Description of the parameter userActionCompositionMode is: <BLOCKQUOTE>\copydoc userActionCompositionMode </BLOCKQUOTE>
\see userActionCompositionMode for more information */
void setUserActionCompositionMode(const QPainter::CompositionMode & __value); void setUserActionCompositionMode(const QPainter::CompositionMode & __value);
/** \brief sets the mode if the standard context menu \see ContextMenuModes, JKQTPLOTTER_USERMOUSEINTERACTION */ /** \brief sets the mode if the standard context menu \see ContextMenuModes, \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void setContextMenuMode(ContextMenuModes mode); void setContextMenuMode(ContextMenuModes mode);
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x-axis to the other x-axis */ /** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x-axis to the other x-axis \see \ref JKQTPLOTTER_SYNCMULTIPLOT */
void synchronizeXAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender); void synchronizeXAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local y-axis to the other y-axis */ /** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local y-axis to the other y-axis \see \ref JKQTPLOTTER_SYNCMULTIPLOT */
void synchronizeYAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender); void synchronizeYAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x- and y-axis to the other x- and y-axis */ /** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x- and y-axis to the other x- and y-axis \see \ref JKQTPLOTTER_SYNCMULTIPLOT */
void synchronizeXYAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender); void synchronizeXYAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
@ -889,12 +1014,12 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
JKQTBasePlotter* plotter; JKQTBasePlotter* plotter;
/** \brief fill color of the zoom rectangle */ /** \brief fill color of the zoom rectangle \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
QColor userActionColor; QColor userActionColor;
/*! \brief default value for property property userActionColor. \see userActionColor for more information */ /*! \brief default value for property property userActionColor. \see userActionColor for more information */
QColor default_userActionColor; QColor default_userActionColor;
/** \brief fill color of the zoom rectangle */ /** \brief the QPainter::CompositionMode used to draw the zoom rectangle etc. \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
QPainter::CompositionMode userActionCompositionMode; QPainter::CompositionMode userActionCompositionMode;
/*! \brief default value for property property userActionCompositionMode. \see userActionCompositionMode for more information */ /*! \brief default value for property property userActionCompositionMode. \see userActionCompositionMode for more information */
QPainter::CompositionMode default_userActionCompositionMode; QPainter::CompositionMode default_userActionCompositionMode;
@ -1043,7 +1168,7 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
* *
* \image html jkqtplotter_mousepositiondisplay.png * \image html jkqtplotter_mousepositiondisplay.png
* *
* \see mousePositionTemplate, \ref JKQTPlotterUserInteraction * \see mousePositionTemplate, \ref JKQTPlotterUserInteraction, \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEMOVE
*/ */
bool displayMousePosition; bool displayMousePosition;
/** \brief this string is used to generate the position output above the graph (\c %1 is replaced by the x-position, \c %2 by the y-position) /** \brief this string is used to generate the position output above the graph (\c %1 is replaced by the x-position, \c %2 by the y-position)