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.