当逻辑坐标小且小数时,如何设置QPainter窗口?

时间:2017-03-10 10:10:51

标签: qt coordinates coordinate-transformation

我想在QWidget上渲染场景,我需要定义从世界坐标到屏幕坐标的转换。 QPainter::setWindow似乎是正确使用的函数,但它将其逻辑坐标定义为int,而不是float

我的逻辑坐标不仅是浮点数,它们也非常小。逻辑坐标的窗口类似于(1.5,1.5)..(1.54,1.53)

我无法使用setWindow,因为路由错误会彻底破坏我的坐标,因此如何设置QPainter转换,以便渲染矩形(x,y)..(x+width,y+height)将完全填充窗口小部件,当矩形具有任意浮点值?

(已选择矩形以具有适合窗口小部件的正确宽高比。)

1 个答案:

答案 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);
}

似乎在我拼凑的几个简单测试中按预期工作。