2017-05-31 78 views
0

我想在鼠標移動圖上顯示x和y座標。 我計算出的X和Y座標,但真的不知道如何在圖表上顯示附近的點(最好是像(x,y)在QCustomplot圖上顯示x和y座標

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

回答

2

您可以創建一個QCPItemText,把文本,並將其移動到您的位置得到了與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(); 
} 

下圖顯示了結果,但由於某種原因,我的捕獲不會使用我的指針圖像。

enter image description here