c++ qt mouseover point qcustomplot

c++ - Visualice los valores de trazado en el mouse.-Detectar puntos Scatter



qt mouseover (3)

Reimplemente QCustomPlot::mouseMoveEvent o conéctese a QCustomPlot::mouseMove .

A continuación, utilice coordToPixel ejes para traducir coords de píxel (cursor) para trazar coords y buscar los puntos más cercanos en su QCPDataMap con QMap::lowerBound(cursorX) .

Estoy intentando mostrar los valores de trazado de diferentes puntos en mi QCustomPlot en el que tengo un estilo de línea de lsLine . Sé que podría establecer un mouse sobre la señal en el QCustomPlot pero eso no QCustomPlot mucha ayuda ya que solo necesito que me informen cuando el mouse esté sobre mi línea trazada. Mi pregunta es si hay alguna forma de averiguar si el mouse está sobre mi dispersión. punto. ¿Hay alguna señal a la que me pueda conectar que me diga cuando el mouse está sobre un punto de dispersión?


Simplemente puede conectar una ranura a la señal de mouseMove que QCustomPlot emite. Luego puede usar QCPAxis::pixelToCoord para encontrar la coordenada:

connect(this, SIGNAL(mouseMove(QMouseEvent*)), this,SLOT(showPointToolTip(QMouseEvent*))); void QCustomPlot::showPointToolTip(QMouseEvent *event) { int x = this->xAxis->pixelToCoord(event->pos().x()); int y = this->yAxis->pixelToCoord(event->pos().y()); setToolTip(QString("%1 , %2").arg(x).arg(y)); }


cuando usa el formato de fecha y hora (incluyendo más puntos por segundo) del eje X, entonces falla el píxel a coord. Si quieres mostrar las coordenadas entre los puntos, entonces esta es la forma más rápida

tal vez útil (con la señal conectada QCustomplot::MouseMove )

void MainWindow::onMouseMoveGraph(QMouseEvent* evt) { int x = this->ui->customPlot->xAxis->pixelToCoord(evt->pos().x()); int y = this->ui->customPlot->yAxis->pixelToCoord(evt->pos().y()); qDebug()<<"pixelToCoord: "<<data.key<<data.value; //this is correct when step is greater 1 second if (this->ui->customPlot->selectedGraphs().count()>0) { QCPGraph* graph = this->ui->customPlot->selectedGraphs().first(); QCPData data = graph->data()->lowerBound(x).value(); double dbottom = graph->valueAxis()->range().lower; //Yaxis bottom value double dtop = graph->valueAxis()->range().upper; //Yaxis top value long ptop = graph->valueAxis()->axisRect()->top(); //graph top margin long pbottom = graph->valueAxis()->axisRect()->bottom(); //graph bottom position // result for Y axis double valueY = (evt->pos().y() - ptop) / (double)(pbottom - ptop)*(double)(dbottom - dtop) + dtop; //or shortly for X-axis double valueX = (evt->pos().x() - graph->keyAxis()->axisRect()->left()); //graph width in pixels double ratio = (double)(graph->keyAxis()->axisRect()->right() - graph->keyAxis()->axisRect()->left()) / (double)(graph->keyAxis()->range().lower - graph->keyAxis()->range().upper); //ratio px->graph width //and result for X-axis valueX=-valueX / ratio + graph->keyAxis()->range().lower; qDebug()<<"calculated:"<<valueX<<valueY; } }