我收到一系列坐标(double
坐标-infinity < x < +infinity
和0 <= y <= 10
),并希望使用这些点绘制折线。我希望图表始终在我的图像的左边框开始,并在右边结束。我的图片的下边框始终表示0 y
- 值,顶部边框始终为10 y
- 值。创建的图像的宽度和高度由用户在运行时决定。
我想用Qt来实现这一点,QImage
与QPainter
结合使用似乎是我的首选武器。我目前要解决的问题是:
如何将我的坐标转换为图片中的像素?
y
- 值似乎相当简单,因为我事先知道图的最小值和最大值,但我正在努力使用x
- 值。到目前为止,我的方法是找到最小值和最大值 - x
- 值并分别缩放每个点。
是否有更原生的做法?
由于一组坐标用于具有不同宽度和高度的多个图像,我想知道矢量图形(svg)是否可能是更合适的方法,但我找不到有关在Qt中创建svg文件的材料,只使用现有文件。我会寻找与Windows图元文件相似的东西。
Qt中的元文件是否匹配?
答案 0 :(得分:1)
使用 QtOpenGL 将另一个图形呈现为openGL上下文的另一种方法。不需要转换/缩放坐标。一旦超过opengl基础知识,您就可以选择合适的viewPort / eye参数来实现任何缩放/平移级别。
答案 1 :(得分:1)
QGraphicsScene
可能会有所帮助。您可以使用addPolygon()
或addPath()
绘制图表。然后使用QGraphicsScene::render()
sceneRect
会在您向其添加项目时自动增长。在“绘图”结束时,您将获得图表的最终大小/边界。创建一个QImage
并将其用作画家后台商店来渲染场景。
QGraphicsScene
还允许您操纵变换矩阵以适应您的需要的方向和比例。