QWidget / QPainter逻辑屏幕坐标转换

时间:2017-03-03 15:52:52

标签: qt coordinates viewport coordinate-systems

我陷入困境,建立了QPainter转型。我已经阅读了Qt文档但是脑筋流正在阻碍。

void MyWidget::paintEvent (QPaintEvent *) {
    QPainter painter (this);
    // ...

我想渲染逻辑坐标中描述的场景。场景包括一个"阶段"这是要渲染的矩形。阶段在逻辑坐标中指定。小部件应该有一个视口(这是正确的术语吗?)

  • 尽可能大,不超出舞台的界限,
  • 与舞台有一个共同的中心。

enter image description here

在上述情况下,舞台将由

之类的东西描述
QRectF stage_rect (QPointF(0.2,5.1), QPointF(6.5,1.9));

如果我设置转换并调用

painter.drawText (1.2, 2.2, "abc");

它应该出现在小部件的左下方,如上所示 - 也就是说,逻辑坐标向上增加,舞台的整个高度显示在小部件中,并且舞台被水平裁剪以保持纵横比(虽然小部件可能太宽/太短,但在这种情况下,舞台将被垂直裁剪。)

我应该对QPainter进行什么样的转换才能使窗口紧贴舞台?

1 个答案:

答案 0 :(得分:1)

Qt的坐标系正向下向右而不是向上和向右,这正是你想要的。为此,请将变换中的Y比例因子设置为-1,将X比例因子设置为1;这将翻转Y坐标而不是X.但是,如果你将这种转换应用于画家,我相信你最终会将你的文字颠倒过来。您可能想要的是变换坐标,然后将变换后的坐标传递给画家。