如何从局部图形坐标获取像素中的全局坐标(Qt,QCustomPlot)

时间:2018-03-28 19:15:39

标签: c++ qt qt5 qcustomplot

我想将局部坐标转换为相对于窗口的全局像素。

我看到了如何从全球到本地的例子。它的使用

LocalDateTime

但是

ui->customPlot->xAxis->pixelToCord(0)

不能工作。

这里我使用按钮来调试结果。红色它是必须的按钮。蓝色它是按钮。

图片链接

ui->customPlot->xAxis->coordToPixel(0)

1 个答案:

答案 0 :(得分:0)

窗口小部件的位置相对于父窗口小部件,如果它没有父窗口,则它相对于屏幕。因此,建立一个合适的父母很重要,在这种情况下,一个好的选择是用作ui->customPlot的父母。

另一方面,coordToPixel()方法要求显示窗口小部件,所以一个很好的选择是使用showEvent(),当更改窗口的大小时,它也会改变那些坐标,所以它还将使用resizeEvent()

<强> *。CPP

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    button = new QPushButton("test", ui->customPlot);
    ...
    ui->customPlot->replot();
}

void MainWindow::moveButtonFromCoord()
{
    double real_x = ui->customPlot->xAxis->coordToPixel(0);
    double real_y = ui->customPlot->yAxis->coordToPixel(0);
    QRect geo = button->geometry();
    geo.moveCenter(QPoint(real_x, real_y));
    button->setGeometry(geo);
}

void MainWindow::resizeEvent(QResizeEvent *event)
{
    moveButtonFromCoord();
    QMainWindow::resizeEvent(event);
}

void MainWindow::showEvent(QShowEvent *event)
{
    moveButtonFromCoord();
    QMainWindow::showEvent(event);
}
...

完整示例可在以下link中找到。