我想将局部坐标转换为相对于窗口的全局像素。
我看到了如何从全球到本地的例子。它的使用
LocalDateTime
但是
ui->customPlot->xAxis->pixelToCord(0)
不能工作。
这里我使用按钮来调试结果。红色它是必须的按钮。蓝色它是按钮。
图片链接
ui->customPlot->xAxis->coordToPixel(0)
答案 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中找到。