QCustomplot: Coords by Mouseclick
-
Hi everybody,
I'm new to Qt and I'm using QCustomPlot to create a plot out of some informations. Now I want to click with the left mousebutton into the graph and want to get the coordinates of the position I clicked at. I couldn't find any solution for it yet, but I can't believe I'm the only one who wants to do this :). It seems like I'm missing something obvious. Can someone give me a hint?
Thanks,
rotpar -
Hi and welcome to devnet,
You can either overload the mouse related events or use one of the "mouse signals":http://www.workslikeclockwork.com/other/qcustomplot-doc/classQCustomPlot.html#aca75bf9afb5dd19349c375de2a87a051 from QCustomplot
-
Hi,
just to complete this for the next newbie who trips over this little stone. I hoped there's a simpler way to do this but I solved the problem as follows:
somewhere in the widgets .cpp file:
@connect(plot_, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(clickedGraph()));@
^^thanks for the hint with the mouseEventsin the .h file of course:
@public slots:
void clickedGraph()@and clickedGraph() does:
@void FVolumePlayerWidget::clickedGraph()
{
QPoint p = this->mapFromGlobal(QCursor::pos()); //get mouse position
QRect plotPos = plot_->axisRect(); //get origin of axis
int x = p.x() - 44; //calc coordinate at clicked position
//TODO: get Position of stuff to calc the value 44//Mark selected position
QCPItemLine *arrow = new QCPItemLine(plot_);
plot_->addItem(arrow);
arrow->start->setCoords(x, 99);
arrow->end->setCoords(x, ecgValueArray[x]); //ecgValues is th y-data I build the graph with earlier
arrow->setHead(QCPLineEnding::esSpikeArrow);
}@so this works out for me so far for fixed graph sizes and because of the amount of data I'm plotting... but maybe it helps someone somehow.
-
You don't need the call to QCursor::pos() nor to map if you use the QMouseEvent that is send by the signal.
-
@
connect(plot_, SIGNAL(mousePress(QMouseEvent*)), SLOT(clickedGraph(QMouseEvent*)));void FVolumePlayerWidget::clickedGraph(QMouseEvent *event)
{
QPoint p = event->pos();
//etc...
}
@