3

我正在使用 QT 并尝试使用 QGraphicsView 和 QGraphicsScene 绘制图形。我不想要任何额外的依赖项,这就是我不使用 QWT 的原因。当我绘制我的数据时,此刻我使用

scene->drawLine(x1,y1,x2,y2,pen);

然后这会在 QGraphicScene 中的 2 个点之间绘制一条线。但这使用左上角 x=0 y=0 系统...我想使用我自己的系统,如下图所示。另一个问题是我有从 -3 到 +3 的双值。有没有人对 QGraphicScene 和 QGraphicsView 有一些经验,可以告诉我如何做到这一点?

在此处输入图像描述

4

1 回答 1

6

尝试查看QGraphicsView::setTransform。该矩阵定义了“场景坐标”如何转换为“视图坐标”,这是图形编程中的常见概念。

还有一些方便的函数 scale()、rotate()、translate() 和 Shear() 可以修改视图的当前变换矩阵。

所以你可以做这样的事情:

scale(1.0, -1.0); // invert Y axis

// translate to account for fact that Y coordinates start at -3
translate(0.0, 3.0); 

// scale Y coordinates to height of widget
scale(1.0, (qreal)viewport()->size().height()/6.0);

而且由于这取决于小部件的大小,因此您还希望捕获任何调整大小事件并在那里再次重置转换矩阵。假设您希望“3”代表视口的顶部,而“-3”代表底部。

于 2013-05-20T20:04:24.197 回答