improved user-interactions (& their example)

This commit is contained in:
jkriege2 2019-01-26 20:12:54 +01:00
parent 0e2237e92f
commit c74e87ad31
6 changed files with 269 additions and 31 deletions

View File

@ -7,6 +7,7 @@
#include "test_user_interaction.h"
#include <QMenuBar>
#include <QMessageBox>
TestUserInteraction::TestUserInteraction(QWidget *parent) :
QMainWindow(parent)
@ -65,10 +66,140 @@ TestUserInteraction::TestUserInteraction(QWidget *parent) :
connect(chkGrid, SIGNAL(toggled(bool)), plot, SLOT(setGrid(bool)));
layChk->addWidget(chkGrid);
// add a QComboBox that allows to set the left mouse button action for the JKQTPlotter
cmbMouseAction=new QComboBox(this);
layForm->addRow("mouse action:", cmbMouseAction);
cmbMouseAction->addItem("NoMouseAction");
cmbMouseAction->addItem("PanPlot=DragPlotWindow");
cmbMouseAction->addItem("ZoomRectangle");
cmbMouseAction->addItem("RectangleEvents");
cmbMouseAction->addItem("CircleEvents");
cmbMouseAction->addItem("EllipseEvents");
cmbMouseAction->addItem("LineEvents");
cmbMouseAction->addItem("ScribbleEvents");
cmbMouseAction->addItem("ClickEvents");
connect(cmbMouseAction, SIGNAL(currentIndexChanged(int)), this, SLOT(setLeftMouseAction(int)));
setLeftMouseAction(cmbMouseAction->currentIndex());
// and add a QLabel to show the different events of the JKQTPlotter:
labMouseMoved=new QLabel(this);
layForm->addRow("last mouse moved:", labMouseMoved);
labMouseClicked=new QLabel(this);
layForm->addRow("last mouse clicked:", labMouseClicked);
labMouseAction=new QLabel(this);
layForm->addRow("last plotter signal:", labMouseAction);
connect(plot, SIGNAL(plotMouseMove(double, double)), this, SLOT(plotMouseMove(double, double)));
connect(plot, SIGNAL(plotMouseClicked(double, double, Qt::KeyboardModifiers , Qt::MouseButton)), this, SLOT(plotMouseClicked(double, double, Qt::KeyboardModifiers, Qt::MouseButton)));
connect(plot, SIGNAL(plotMouseDoubleClicked(double, double, Qt::KeyboardModifiers, Qt::MouseButton)), this, SLOT(plotMouseDoubleClicked(double, double, Qt::KeyboardModifiers, Qt::MouseButton)));
connect(plot, SIGNAL(plotNewZoomRectangle(double, double, double, double, Qt::KeyboardModifiers)), this, SLOT(plotNewZoomRectangle(double, double, double, double, Qt::KeyboardModifiers)));
connect(plot, SIGNAL(contextMenuOpened(double, double, QMenu*)), this, SLOT(contextMenuOpened(double, double, QMenu*)));
connect(plot, SIGNAL(zoomChangedLocally(double, double, double, double, JKQTPlotter*)), this, SLOT(zoomChangedLocally(double, double, double, double, JKQTPlotter*)));
connect(plot, SIGNAL(userClickFinished(double, double, Qt::KeyboardModifiers)), this, SLOT(userClickFinished(double, double, Qt::KeyboardModifiers)));
connect(plot, SIGNAL(userScribbleClick(double, double, Qt::KeyboardModifiers, bool, bool)), this, SLOT(userScribbleClick(double, double, Qt::KeyboardModifiers, bool, bool)));
connect(plot, SIGNAL(userRectangleFinished(double, double, double, double, Qt::KeyboardModifiers)), this, SLOT(userRectangleFinished(double, double, double, double, Qt::KeyboardModifiers)));
connect(plot, SIGNAL(userLineFinished(double, double, double, double, Qt::KeyboardModifiers)), this, SLOT(userLineFinished(double, double, double, double, Qt::KeyboardModifiers)));
connect(plot, SIGNAL(userCircleFinished(double, double, double, Qt::KeyboardModifiers)), this, SLOT(userCircleFinished(double, double, double, Qt::KeyboardModifiers)));
connect(plot, SIGNAL(userEllipseFinished(double, double, double, double, Qt::KeyboardModifiers)), this, SLOT(userEllipseFinished(double, double, double, double, Qt::KeyboardModifiers)));
w->setLayout(layout);
resize(800,600);
}
void TestUserInteraction::setLeftMouseAction(int index)
{
plot->setMouseActionMode(static_cast<JKQTPlotter::MouseActionModes>(index));
}
void TestUserInteraction::plotMouseMove(double x, double y)
{
labMouseMoved->setText(QString("plotMouseMove(%1, %2)").arg(x).arg(y));
}
void TestUserInteraction::plotMouseClicked(double x, double y, Qt::KeyboardModifiers modifiers, Qt::MouseButton button)
{
labMouseClicked->setText(QString("plotMouseClicked(%1, %2, modifiers=%3, button=%4)").arg(x).arg(y).arg(KeyboradMod2String(modifiers)).arg(MouseButton2String(button)));
}
void TestUserInteraction::plotMouseDoubleClicked(double x, double y, Qt::KeyboardModifiers modifiers, Qt::MouseButton button)
{
labMouseClicked->setText(QString("plotMouseDoubleClicked(%1, %2, modifiers=%3, button=%4)").arg(x).arg(y).arg(KeyboradMod2String(modifiers)).arg(MouseButton2String(button)));
}
void TestUserInteraction::plotNewZoomRectangle(double mouseDragRectXStart, double mouseDragRectXEnd, double mouseDragRectYStart, double mouseDragRectYEnd, Qt::KeyboardModifiers modifiers)
{
labMouseAction->setText(QString("plotNewZoomRectangle(x=%1..%2, y=%3..%4, modifiers=%5)").arg(mouseDragRectXStart).arg(mouseDragRectXEnd).arg(mouseDragRectYStart).arg(mouseDragRectYEnd).arg(KeyboradMod2String(modifiers)));
}
void TestUserInteraction::contextMenuOpened(double x, double y, QMenu *contextMenu)
{
contextMenu->addSeparator();
QAction* act=contextMenu->addMenu(QString("contextMenuOpened(x=%1, y=%2)").arg(x).arg(y))->addAction("user-added action");
connect(act, &QAction::triggered, [x,y]() { QMessageBox::warning(nullptr, tr("Plot Context Menu"),
tr("Context Menu was opened at x/y=%1/%2!").arg(x).arg(y),
QMessageBox::Ok,
QMessageBox::Ok); });
labMouseAction->setText(QString("contextMenuOpened(x=%1, y=%2)").arg(x).arg(y));
}
void TestUserInteraction::zoomChangedLocally(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter */*sender*/)
{
labMouseAction->setText(QString("zoomChangedLocally(x=%1..%2, y=%3..%4)").arg(newxmin).arg(newxmax).arg(newymin).arg(newymax));
}
void TestUserInteraction::userClickFinished(double x, double y, Qt::KeyboardModifiers modifiers)
{
labMouseAction->setText(QString("userClickFinished(%1, %2, modifiers=%3)").arg(x).arg(y).arg(KeyboradMod2String(modifiers)));
}
void TestUserInteraction::userScribbleClick(double x, double y, Qt::KeyboardModifiers modifiers, bool first, bool last)
{
static int counter=0;
if (first) counter=0;
else counter++;
labMouseAction->setText(QString("userClickFinished(%1, %2, modifiers=%3, first=%4, last=%5) -> scribble-points so far: %6").arg(x).arg(y).arg(KeyboradMod2String(modifiers)).arg(first).arg(last).arg(counter));
}
void TestUserInteraction::userRectangleFinished(double x, double y, double width, double height, Qt::KeyboardModifiers modifiers)
{
labMouseAction->setText(QString("userRectangleFinished(x=%1, y=%2, width=%3, height=%4, modifiers=%5)").arg(x).arg(y).arg(width).arg(height).arg(KeyboradMod2String(modifiers)));
}
void TestUserInteraction::userLineFinished(double x1, double y1, double x2, double y2, Qt::KeyboardModifiers modifiers)
{
labMouseAction->setText(QString("userLineFinished(x1=%1/%2, x2=%3/%4, modifiers=%5)").arg(x1).arg(y1).arg(x2).arg(y2).arg(KeyboradMod2String(modifiers)));
}
void TestUserInteraction::userCircleFinished(double x, double y, double radius, Qt::KeyboardModifiers modifiers)
{
labMouseAction->setText(QString("userRectangleFinished(x=%1, y=%2, radius=%3, modifiers=%4)").arg(x).arg(y).arg(radius).arg(KeyboradMod2String(modifiers)));
}
void TestUserInteraction::userEllipseFinished(double x, double y, double radiusX, double radiusY, Qt::KeyboardModifiers modifiers)
{
labMouseAction->setText(QString("userRectangleFinished(x=%1, y=%2, radiusX=%3, radiusY=%4, modifiers=%5)").arg(x).arg(y).arg(radiusX).arg(radiusY).arg(KeyboradMod2String(modifiers)));
}
QString TestUserInteraction::KeyboradMod2String(Qt::KeyboardModifiers modifiers) {
QString mod="";
if ((modifiers & Qt::ShiftModifier) != 0) mod+="SHIFT ";
if ((modifiers & Qt::ControlModifier) != 0) mod+="CTRL ";
if ((modifiers & Qt::AltModifier) != 0) mod+="ALT ";
if ((modifiers & Qt::MetaModifier) != 0) mod+="META ";
if ((modifiers & Qt::KeypadModifier) != 0) mod+="KEYPAD ";
return mod;
}
QString TestUserInteraction::MouseButton2String(Qt::MouseButton button) {
QString btn="";
if ((button & Qt::LeftButton) != 0) btn+="LEFT ";
if ((button & Qt::RightButton) != 0) btn+="RIGHT ";
if ((button & Qt::MiddleButton) != 0) btn+="MID ";
if ((button & Qt::BackButton) != 0) btn+="BACK ";
if ((button & Qt::ForwardButton) != 0) btn+="FORWARD ";
return btn;
}
void TestUserInteraction::initPlot()
{
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)

View File

@ -21,7 +21,20 @@ class TestUserInteraction : public QMainWindow
signals:
public slots:
void setLeftMouseAction(int index);
void plotMouseMove(double x, double y);
void plotMouseClicked(double x, double y, Qt::KeyboardModifiers modifiers, Qt::MouseButton button);
void plotMouseDoubleClicked(double x, double y, Qt::KeyboardModifiers modifiers, Qt::MouseButton button);
void plotNewZoomRectangle(double mouseDragRectXStart, double mouseDragRectXEnd, double mouseDragRectYStart, double mouseDragRectYEnd, Qt::KeyboardModifiers modifiers);
void contextMenuOpened(double x, double y, QMenu* contextMenu);
void zoomChangedLocally(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
void userClickFinished(double x, double y, Qt::KeyboardModifiers modifiers);
void userScribbleClick(double x, double y, Qt::KeyboardModifiers modifiers, bool first, bool last);
void userRectangleFinished(double x, double y, double width, double height, Qt::KeyboardModifiers modifiers);
void userLineFinished(double x1, double y1, double x2, double y2, Qt::KeyboardModifiers modifiers);
void userCircleFinished(double x, double y, double radius, Qt::KeyboardModifiers modifiers);
void userEllipseFinished(double x, double y, double radiusX, double radiusY, Qt::KeyboardModifiers modifiers);
protected:
void initPlot();
JKQTPlotter* plot;
@ -32,8 +45,15 @@ class TestUserInteraction : public QMainWindow
QCheckBox* chkShowToolbar;
QCheckBox* chkToolbarAlwaysOn;
QCheckBox* chkGrid;
QComboBox* cmbMouseAction;
QLabel* labMouseAction;
QLabel* labMouseMoved;
QLabel* labMouseClicked;
JKQTPXYLineGraph* graph1;
JKQTPXYLineGraph* graph2;
static QString MouseButton2String(Qt::MouseButton button);
static QString KeyboradMod2String(Qt::KeyboardModifiers modifiers);
};
#endif // TEST_USER_INTERACTION_H

View File

@ -95,7 +95,7 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
virtual QPaintDevice* createPaintdeviceMM(const QString& filename, double widthMM, double heightMM) const;
};
/** \brief base class for 2D plotter classes
/** \brief base class for 2D plotter classes (used by the plotter widget JKQTPlotter)
* \ingroup jkqtpplotterclasses
*
* This class implements basic functionalities for the plotter classes. Those are:
@ -109,9 +109,9 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* .
*
* This class is NOT a widget, if you need a plotting widget, use JKQTPlotter. This class may be used to
* plot onto any JKQTPEnhancedPainter.
*
* plot using a JKQTPEnhancedPainter.
*
* \see JKQTPlotter
*
* \section jkqtplotter_base_datastore Data Storage
* As already mentioned this class does not provide means to draw graphs, but it contains a basic mechanism to associate

View File

@ -347,7 +347,7 @@ void JKQTPlotter::mouseMoveEvent ( QMouseEvent * event ) {
event->accept();
//std::cout<<mouseZoomingTStart<<" -- "<<mouseZoomingTEnd<<std::endl;
if (mouseActionMode==JKQTPlotter::ZoomRectangle) {
emit plotNewZoomRectangle(mouseDragRectXStart, mouseDragRectXEnd, mouseDragRectYStart, mouseDragRectYEnd);
emit plotNewZoomRectangle(mouseDragRectXStart, mouseDragRectXEnd, mouseDragRectYStart, mouseDragRectYEnd, event->modifiers());
}
if ((mouseActionMode==JKQTPlotter::ScribbleEvents) && ((mouseDragRectXStart!=mouseDragRectXEnd) || (mouseDragRectYStart!=mouseDragRectYEnd)) ) {
emit userScribbleClick(mouseDragRectXEnd, mouseDragRectYEnd, event->modifiers(), false, false);

View File

@ -59,7 +59,7 @@
LIB_EXPORT void initJKQTPlotterResources();
/** \brief class to plot function graphs in linear or (semi-)logarithmic scale
/** \brief plotter widget for scientific plots (uses JKQTBasePlotter to do the actual drawing)
* \ingroup jkqtpplotterclasses
*
* This class is an implementation of JKQTBasePlotter. It uses the tools from this base class
@ -190,14 +190,16 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
/** \brief availble user-action mode this JKQtPlotter use when mouse events occur.
* This allows you to e.g. draw rectangles or lines over the plot and receive a signal, when the drawing finishes */
enum MouseActionModes {
ZoomRectangle, /*!< \brief draw a rectangle and when finish zoom to that rectangle */
RectangleEvents, /*!< \brief draw a rectangle and when finished execute the signal userRectangleFinished() */
CircleEvents, /*!< \brief draw a circle and when finished execute the signal userCircleFinished() */
EllipseEvents, /*!< \brief draw an ellipse and when finished execute the signal userEllipseFinished() */
LineEvents, /*!< \brief draw a line and when finished execute the signal userLineFinished() */
ScribbleEvents, /*!< \brief let the user scribble on the plot (left mouse button is kept pressed) and call userScribbleClick() for each new position */
NoMouseAction, /*!< \brief no action is to be performed */
ClickEvents /*!< \brief sinply call userClickFinished() for every single-click of the mouse button */
NoMouseAction=0, /*!< \brief no action is to be performed */
DragPlotWindow=1, /*!< \brief the user can draw the current plot window while keeping the left mouse-button pushed down (=panning) */
PanPlot=DragPlotWindow, /*!< \copydoc DragPlotWindow */
ZoomRectangle=2, /*!< \brief draw a rectangle and when finish zoom to that rectangle */
RectangleEvents=3, /*!< \brief draw a rectangle and when finished execute the signal userRectangleFinished() */
CircleEvents=4, /*!< \brief draw a circle and when finished execute the signal userCircleFinished() */
EllipseEvents=5, /*!< \brief draw an ellipse and when finished execute the signal userEllipseFinished() */
LineEvents=6, /*!< \brief draw a line and when finished execute the signal userLineFinished() */
ScribbleEvents=7, /*!< \brief let the user scribble on the plot (left mouse button is kept pressed) and call userScribbleClick() for each new position */
ClickEvents=8 /*!< \brief sinply call userClickFinished() for every single-click of the mouse button */
};
/** \brief options of how to react to a right mouse button click */
@ -640,36 +642,121 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
inline void setXY(double xminn, double xmaxx, double yminn, double ymaxx) { plotter->setXY(xminn, xmaxx, yminn, ymaxx); }
signals:
/** \brief signal: emitted whenever the mouse moved over the plot */
/** \brief emitted whenever the mouse moves
*
* \param x x-position of the mouse (in plot coordinates)
* \param y y-position of the mouse (in plot coordinates)
*/
void plotMouseMove(double x, double y);
/** \brief signal: emitted whenever the mouse was clicked over the plot */
/** \brief emitted when a single-click event from the mouse occurs inside the plot
*
* \param x x-position of the mouse (in plot coordinates)
* \param y y-position of the mouse (in plot coordinates)
* \param modifiers key-modifiers when the click occured
* \param button mouse-button that was used for the click
*/
void plotMouseClicked(double x, double y, Qt::KeyboardModifiers modifiers, Qt::MouseButton button);
/** \brief signal: emitted whenever the mouse was clicked over the plot */
/** \brief emitted when a double-click event from the mouse occurs inside the plot
*
* \param x x-position of the mouse (in plot coordinates)
* \param y y-position of the mouse (in plot coordinates)
* \param modifiers key-modifiers when the click occured
* \param button mouse-button that was used for the click
*/
void plotMouseDoubleClicked(double x, double y, Qt::KeyboardModifiers modifiers, Qt::MouseButton button);
/** \brief signal: emitted whenever a zoom rectangle is drawn (and it's size changes) */
void plotNewZoomRectangle(double mouseDragRectXStart, double mouseDragRectXEnd, double mouseDragRectYStart, double mouseDragRectYEnd);
/** \brief emitted when mouseActionMode==JKQTPlotter::ZoomRectangle and the drawing of the new zoom rectangle is finished (=mouse key released)
*
* \param mouseDragRectXStart start of the selected x-range (in plot coordinates)
* \param mouseDragRectXEnd end of the selected x-range (in plot coordinates)
* \param mouseDragRectYStart start of the selected x-range (in plot coordinates)
* \param mouseDragRectYEnd end of the selected x-range (in plot coordinates)
* \param modifiers key-modifiers when the click occured
*/
void plotNewZoomRectangle(double mouseDragRectXStart, double mouseDragRectXEnd, double mouseDragRectYStart, double mouseDragRectYEnd, Qt::KeyboardModifiers modifiers);
/** \brief emitted when the plot scaling has been recalculated */
void plotScalingRecalculated();
/** \brief emitted before the plot scaling has been recalculated */
void beforePlotScalingRecalculate();
/** \brief emitted when a context-emnu was opened at the given position */
/** \brief emitted whenever a context menu is opened. You can modify the menu via the parameter \a contextMenu!
*
* \param x x-position of the context-menu (in plot coordinates)
* \param y y-position of the context-menu (in plot coordinates)
* \param contextMenu QMenu-object of the context menu. This object may be altered to display additional items ... Here is an example:
* \code
* contextMenu->addSeparator();
* QAction* act=contextMenu->addMenu(QString("contextMenuOpened(x=%1, y=%2)").arg(x).arg(y))->addAction("user-added action");
* connect(act, &QAction::triggered, [x,y]() { QMessageBox::warning(nullptr, tr("Plot Context Menu"),
* tr("Context Menu was opened at x/y=%1/%2!").arg(x).arg(y),
* QMessageBox::Ok,
* QMessageBox::Ok); });
* \endcode
*/
void contextMenuOpened(double x, double y, QMenu* contextMenu);
/** \brief signal: emitted whenever the user selects a new x-y zoom range (by mouse) */
/** \brief signal: emitted whenever the user selects a new x-y zoom range (by mouse)
*
* \param newxmin start of the selected x-range (in plot coordinates)
* \param newxmax end of the selected x-range (in plot coordinates)
* \param newymin start of the selected x-range (in plot coordinates)
* \param newymax end of the selected x-range (in plot coordinates)
* \param sender JKQTPlotter sending this event
*
* This signal is designed to be connected to these slots: synchronizeXAxis(), synchronizeYAxis(), synchronizeXYAxis()
*/
void zoomChangedLocally(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
/** \brief emitted when the user clicks the plot */
/** \brief emitted when mouseActionMode==JKQTPlotter::ClickEvents and a click event from the mouse occurs inside the plot
*
* \param x x-position of the mouse (in plot coordinates)
* \param y y-position of the mouse (in plot coordinates)
* \param modifiers key-modifiers when the click occured
*/
void userClickFinished(double x, double y, Qt::KeyboardModifiers modifiers);
/** \brief emitted when the user scribbles */
/** \brief emitted when mouseActionMode==JKQTPlotter::ScribbleEvents and a click event from the mouse occurs inside the plot,
* or the mouse moved while the left button is pressed down
*
* \param x x-position of the mouse (in plot coordinates)
* \param y y-position of the mouse (in plot coordinates)
* \param modifiers key-modifiers when the event was generated
* \param first if \c true: this is the first event of a series that starts with pressing the mouse-button down, within the series, this is \c false
* \param last if \c true: this is the last event of a series that ends when releasing the mouse-button, within the series, this is \c false
*/
void userScribbleClick(double x, double y, Qt::KeyboardModifiers modifiers, bool first, bool last);
/** \brief emitted when the user draws a rectangle */
/** \brief emitted when mouseActionMode==JKQTPlotter::RectangleEvents and the drawing of the new rectangle is finished (=mouse key released)
*
* \param x x-coordinate of the bottom left corner of the rectangle (in plot coordinates)
* \param y y-coordinate of the bottom left corner of the rectangle (in plot coordinates)
* \param width width of the rectangle (in plot coordinates)
* \param height height of the rectangle (in plot coordinates)
* \param modifiers key-modifiers when the rectangle was finished
*/
void userRectangleFinished(double x, double y, double width, double height, Qt::KeyboardModifiers modifiers);
/** \brief emitted when the user draws a line */
/** \brief emitted when mouseActionMode==JKQTPlotter::LineEvents and the drawing of the new line is finished (=mouse key released)
*
* \param x1 x-coordinate of the start of the line (in plot coordinates)
* \param y1 y-coordinate of the start of the line (in plot coordinates)
* \param x2 x-coordinate of the end of the line (in plot coordinates)
* \param y2 y-coordinate of the end of the line (in plot coordinates)
* \param modifiers key-modifiers when the rectangle was finished
*/
void userLineFinished(double x1, double y1, double x2, double y2, Qt::KeyboardModifiers modifiers);
/** \brief emitted when the user draws a circle */
/** \brief emitted when mouseActionMode==JKQTPlotter::CircleEvents and the drawing of the new circle is finished (=mouse key released)
*
* \param x x-coordinate of the center of the circle (in plot coordinates)
* \param y y-coordinate of the center of the circle (in plot coordinates)
* \param radius radius of the circle (in plot coordinates)
* \param modifiers key-modifiers when the rectangle was finished
*/
void userCircleFinished(double x, double y, double radius, Qt::KeyboardModifiers modifiers);
/** \brief emitted when the user draws an ellipse */
/** \brief emitted when mouseActionMode==JKQTPlotter::EllipseEvents and the drawing of the new ellipse is finished (=mouse key released)
*
* \param x x-coordinate of the center of the ellipse (in plot coordinates)
* \param y y-coordinate of the center of the ellipse (in plot coordinates)
* \param radiusX half-axis in x-direction of the ellipse (in plot coordinates)
* \param radiusY half-axis in y-direction of the ellipse (in plot coordinates)
* \param modifiers key-modifiers when the rectangle was finished
*/
void userEllipseFinished(double x, double y, double radiusX, double radiusY, Qt::KeyboardModifiers modifiers);

View File

@ -139,11 +139,11 @@ LIB_EXPORT JKQTPCADrawMode String2JKQTPCADrawMode(const QString& pos);
/** \brief display mode for the axis labels
* \ingroup jkqtptools */
enum JKQTPCALabelType {
JKQTPCALTdefault, /*!< \brief simply print the numbers */
JKQTPCALTdefault, /*!< \brief simply print the numbers \image html JKQTPCALTdefault.png */
JKQTPCALTexponentCharacter, /*!< \brief print the numbers and show a unit character, i.e. \c 5µ for \f$ 5\cdot 10^{-6} \f$ , \cd 3k for \f$ 3\cdot 10^3 \f$ ... */
JKQTPCALTexponent, /*!< \brief show numbers in exponential for, e.g. \f$ 3\cdot 10^5 \f$ ... */
JKQTPCALTdate, /*!< \brief show numbers as dates */
JKQTPCALTtime, /*!< \brief show numbers as times */
JKQTPCALTexponent, /*!< \brief show numbers in exponential for, e.g. \f$ 3\cdot 10^5 \f$ ... \image html JKQTPCALTexponent.png */
JKQTPCALTdate, /*!< \brief show numbers as dates \image html JKQTPCALTdate.png */
JKQTPCALTtime, /*!< \brief show numbers as times \image html JKQTPCALTtime.png*/
JKQTPCALTdatetime, /*!< \brief show numbers as times */
};