void QCustomPlot::mousePressEvent(QMouseEvent *event){
emit mousePress(event);
mMousePressPos = event->pos();if(mSelectionMode == QCP::smode1){qDebug()<< __FUNCTION__ << mSelectionMode;switch(measure->state()){case QCPMeasureGraph::mNoPointState:
measure->setStartPoint(event->pos());
measure->setEndPoint(event->pos());
measure->setState(QCPMeasureGraph::mStartPointState);replot();break;case QCPMeasureGraph::mStartPointState:
measure->setEndPoint(event->pos());
measure->setState(QCPMeasureGraph::mEndPointState);replot();break;default:break;}}else{// need this to determine in releaseEvent whether it was a click (no position change between press and release)// call event of affected layout element:
mMouseEventElement =layoutElementAt(event->pos());if(mMouseEventElement)
mMouseEventElement->mousePressEvent(event);}
event->accept();}
mouseReleaseEvent
void QCustomPlot::mouseReleaseEvent(QMouseEvent *event){
emit mouseRelease(event);bool doReplot =false;if(mSelectionMode == QCP::smode1){qDebug()<< __FUNCTION__ << mSelectionMode;}else{if((mMousePressPos - event->pos()).manhattanLength()<5)// determine whether it was a click operation{if(event->button()== Qt::LeftButton){// handle selection mechanism:
QVariant details;
QCPLayerable *clickedLayerable =layerableAt(event->pos(),true,&details);bool selectionStateChanged =false;bool additive = mInteractions.testFlag(QCP::iMultiSelect)&& event->modifiers().testFlag(mMultiSelectModifier);// deselect all other layerables if not additive selection:if(!additive){
foreach (QCPLayer *layer, mLayers){
foreach (QCPLayerable *layerable, layer->children()){if(layerable != clickedLayerable && mInteractions.testFlag(layerable->selectionCategory())){bool selChanged =false;
layerable->deselectEvent(&selChanged);
selectionStateChanged |= selChanged;}}}}if(clickedLayerable && mInteractions.testFlag(clickedLayerable->selectionCategory())){// a layerable was actually clicked, call its selectEvent:bool selChanged =false;
clickedLayerable->selectEvent(event, additive, details,&selChanged);
selectionStateChanged |= selChanged;}
doReplot =true;if(selectionStateChanged)
emit selectionChangedByUser();}// emit specialized object click signals:
QVariant details;
QCPLayerable *clickedLayerable =layerableAt(event->pos(),false,&details);// for these signals, selectability is ignored, that's why we call this again with onlySelectable set to falseif(QCPAbstractPlottable *ap = qobject_cast<QCPAbstractPlottable*>(clickedLayerable))
emit plottableClick(ap, event);elseif(QCPAxis *ax = qobject_cast<QCPAxis*>(clickedLayerable))
emit axisClick(ax, details.value<QCPAxis::SelectablePart>(), event);elseif(QCPAbstractItem *ai = qobject_cast<QCPAbstractItem*>(clickedLayerable))
emit itemClick(ai, event);elseif(QCPLegend *lg = qobject_cast<QCPLegend*>(clickedLayerable))
emit legendClick(lg,0, event);elseif(QCPAbstractLegendItem *li = qobject_cast<QCPAbstractLegendItem*>(clickedLayerable))
emit legendClick(li->parentLegend(), li, event);elseif(QCPPlotTitle *pt = qobject_cast<QCPPlotTitle*>(clickedLayerable))
emit titleClick(event, pt);}// call event of affected layout element:if(mMouseEventElement){
mMouseEventElement->mouseReleaseEvent(event);
mMouseEventElement =0;}if(doReplot ||noAntialiasingOnDrag())replot();}
event->accept();}