我正在使用 Qt 4.7 QPainter 将一些多边形等绘制到小部件中。我希望改变坐标系,使 (0,0) 位于我的小部件的中心,并且 x/y 轴以标准的“笛卡尔”方式运行(即 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 文档和网络之后,我无法弄清楚!
谢谢,
克里斯