我想在QWidget上渲染场景,我需要定义从世界坐标到屏幕坐标的转换。 QPainter::setWindow似乎是正确使用的函数,但它将其逻辑坐标定义为int
,而不是float
。
我的逻辑坐标不仅是浮点数,它们也非常小。逻辑坐标的窗口类似于(1.5,1.5)..(1.54,1.53)
。
我无法使用setWindow
,因为路由错误会彻底破坏我的坐标,因此如何设置QPainter
转换,以便渲染矩形(x,y)..(x+width,y+height)
将完全填充窗口小部件,当矩形具有任意浮点值?
(已选择矩形以具有适合窗口小部件的正确宽高比。)
答案 0 :(得分:3)
您可以编写自己的“浮点”版QPainter::setWindow
...
void set_painter_window (QPainter &painter, const QRectF &logical_rect)
{
QTransform xform;
xform.scale(painter.viewport().width() / logical_rect.width(),
painter.viewport().height() / logical_rect.height());
xform.translate(-logical_rect.left(), -logical_rect.top());
painter.setTransform(xform);
}
似乎在我拼凑的几个简单测试中按预期工作。