1

I want to display the x and y coordinates on mouse move on the graph. I calculated the x and y coordinates but not really sure how to display on the graph near to the point (preferably like (x,y) this

connect(ui->customPlot, SIGNAL(mouseRelease(QMouseEvent*)), this, SLOT(mouseRelease(QMouseEvent*)));
connect(ui->customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress(QMouseEvent*)));


float MainWindow::findX(QCustomPlot* customPlot, QCPCursor* cursor1, QMouseEvent* event)
{

    double x = customPlot->xAxis->pixelToCoord(event->pos().x());
    double y = customPlot->yAxis->pixelToCoord(event->pos().y());

    // I think I need to write a function here which will display the text on the graph.
}

void MainWindow::mouseRelease(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton) {
        static QCPCursor cursor1;
        QCustomPlot* plot = (QCustomPlot*)sender();
        float x = findX(plot, &cursor1, event);
    }
}

void MainWindow::mousePressed(QMouseEvent* event)
{
    if (event->button() == Qt::RightButton) {
        QCustomPlot* plot = (QCustomPlot*)sender();
        plot->setContextMenuPolicy(Qt::CustomContextMenu);
        connect(plot, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowContextMenu(const QPoint&)));
    }
}

1 Answer 1

3

You can create a QCPItemText and place the text and move it to the position you got with pixelToCoord.

*.h

private:
    QCPItemText *textItem;

private slots:
    void onMouseMove(QMouseEvent* event);

*.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    textItem = new QCPItemText(ui->customPlot);
    connect(ui->customPlot, &QCustomPlot::mouseMove, this, &MainWindow::onMouseMove);
}


void MainWindow::onMouseMove(QMouseEvent *event)
{
    QCustomPlot* customPlot = qobject_cast<QCustomPlot*>(sender());
    double x = customPlot->xAxis->pixelToCoord(event->pos().x());
    double y = customPlot->yAxis->pixelToCoord(event->pos().y());
    textItem->setText(QString("(%1, %2)").arg(x).arg(2));
    textItem->position->setCoords(QPointF(x, y));
    textItem->setFont(QFont(font().family(), 10));
    customPlot->replot();
}

The following image shows the result but for some reason my capture does not take the image of my pointer.

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.