用给定的双坐标绘制图形

时间:2011-12-28 14:52:47

标签: c++ qt graph vector-graphics

我收到一系列坐标(double坐标-infinity < x < +infinity0 <= y <= 10),并希望使用这些点绘制折线。我希望图表始终在我的图像的左边框开始,并在右边结束。我的图片的下边框始终表示0 y - 值,顶部边框始终为10 y - 值。创建的图像的宽度和高度由用户在运行时决定。

我想用Qt来实现这一点,QImageQPainter结合使用似乎是我的首选武器。我目前要解决的问题是:

如何将我的坐标转换为图片中的像素?

y - 值似乎相当简单,因为我事先知道图的最小值和最大值,但我正在努力使用x - 值。到目前为止,我的方法是找到最小值和最大值 - x - 值并分别缩放每个点。

是否有更原生的做法?

由于一组坐标用于具有不同宽度和高度的多个图像,我想知道矢量图形(svg)是否可能是更合适的方法,但我找不到有关在Qt中创建svg文件的材料,只使用现有文件。我会寻找与Windows图元文件相似的东西。

Qt中的元文件是否匹配?

2 个答案:

答案 0 :(得分:1)

使用 QtOpenGL 将另一个图形呈现为openGL上下文的另一种方法。不需要转换/缩放坐标。一旦超过opengl基础知识,您就可以选择合适的viewPort / eye参数来实现任何缩放/平移级别。

答案 1 :(得分:1)

在这种情况下,

QGraphicsScene可能会有所帮助。您可以使用addPolygon()addPath()绘制图表。然后使用QGraphicsScene::render()

将场景渲染为位图

sceneRect会在您向其添加项目时自动增长。在“绘图”结束时,您将获得图表的最终大小/边界。创建一个QImage并将其用作画家后台商店来渲染场景。

QGraphicsScene还允许您操纵变换矩阵以适应您的需要的方向和比例。