简体   繁体   中英

Display x and y coordinates on graph in QCustomplot

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&)));
    }
}

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.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM