使用Qt绘制Sin(x)图

kwi*_*ess 9 qt

我正在尝试绘制正弦图的方法.

我的小部件只希望通过几个任意数据点传递.我必须将这些数据点拟合成正弦曲线:

SIN(X)

到目前为止,我已经尝试了一些使用QPainterPath的方法.

  1. QPainterPath :: lineTo - 我尝试使用此函数绘制曲线,通过获取我的数据点并在它们之间创建如此多的点,该线实际上平滑了一点.我觉得这有点太计算密集了.
  2. QPainterPath :: cubicTo - 从我从RTFM收集的内容来看,这是最好的方法.唯一的问题是,我不确定如何将控制点绘制在一致的位置,并以编程方式按照我希望的方式平滑曲线.我无法通过此功能获得所需的结果.

经过一些谷歌搜索,我发现了几个使用Qwt进行曲线绘制的论坛帖子.如果我可以使用Qwt会很棒,但它不是一个选项,因为我只限于使用Qt.

有没有人有有用的反馈/建议?

sam*_*m-w 7

我正在做一个非常类似的事情,绘制参数均衡器(带有多条扫描曲线的长线)的波特扫描.我正在做的方式(伪样式):

qreal yCoords[GRAPH_WIDTH];
...
QPainter Painter(this);
Painter.setRenderHint(QPainter::Antialiasing, true);
//Painter.setRenderHint(QPainter::HighQualityAntialiasing, true); //opengl specific
for(int xCoord = 0; xCoord < GRAPH_WIDTH; x++)
  Path.lineTo(QPointF(xCoord, yCoord[xCoord]));
...
Painter.drawPath(Path);
Run Code Online (Sandbox Code Playgroud)

调用setRenderHint和绘制线的组合QPointF(即两个qreal)而不是QPoint(两个int)使得线条非常平滑.

我们在运行Ubuntu的SBC上使用它,并且为600x300px图形获得重绘时间(包括所有复杂的数学计算以获得第一位的点数)~80ms.初步测试显示,启用opengl渲染可将此时间减少到约8毫秒(显然处理器密集型任务是使用抗锯齿的绘画),所以如果你能做到这一点,我认为这个解决方案对你有用.