我正在使用Qt 4.7 QPainter绘制一些多边形,等等到一个小部件。我希望改变坐标系使得(0,0)位于我的小部件的中心,并且x/y轴以标准的“笛卡尔”方式运行(即,y增加“向上”并减小“下”)。换句话说,如果你知道我的意思,我希望坐标是“数学”,而不是“计算机图形”。 :-)使用窗口/视口翻转QPainter y轴
我正在尝试使用setViewport()和setWindow()来做这件事,而不是自己做数学,因为它能够直接用我的坐标直接调用绘图方法。
这里是我到目前为止有:
// Setup coordinates
double screenWidth = width();
double screenHeight = height();
double windowWidth = 100.0;
double windowHeight = (screenHeight/screenWidth) * windowWidth;
painter.setViewport(0, 0, screenWidth, screenHeight);
painter.setWindow(-(windowWidth/2.0), -(windowHeight/2.0), windowWidth, windowHeight);
// Draw stuff
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::blue);
painter.drawRect(-10, -10, 20, 20);
现在,这工作得很好,因为它吸引一个漂亮的蓝色方块在屏幕的中间。问题是,我不得不说,左上角是(-10,-10)。我希望能够做到这一点(-10,10),因为这就是笛卡尔坐标系中的情况。
我试图搞乱setWindow/setViewport来得到这个“y轴翻转”,但无济于事。这似乎是一件非常简单/基本的事情,但在淘汰Qt文档和网页之后,我无法弄清楚!
谢谢,
克里斯
正确,但是需要提及的是,文本也会翻转。这大多是不期望的! – bkausbk 2014-03-24 12:50:11
感谢您的更新;) – Stormenet 2014-12-09 17:06:13