2017-05-31 8 views
0

Je souhaite afficher les coordonnées x et y lors du déplacement de la souris sur le graphique. j'ai calculé les coordonnées x et y, mais pas vraiment sûr comment afficher sur le graphique proche du point (de préférence comme (x,y) ceAfficher les coordonnées x et y sur le graphique dans QCustomplot

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

Répondre

2

Vous pouvez créer un QCPItemText et placer le texte et le déplacer vers la position que vous obtenu avec 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(); 
} 

L'image suivante montre le résultat, mais pour une raison quelconque ma capture ne prend pas l'image de mon pointeur.

enter image description here