• 6629阅读
  • 3回复

[讨论]QML的Canvas配合动画框架出现性能下降 [复制链接]

上一主题 下一主题
离线彩阳
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-03
如题。是这样的,由于想要绘制一些直线什么的图元,因而使用Canvas来进行绘制。
但是基本上都是动态改变直线的位置的,所以利用了NumberAnimation作用于Canvas的直线位置。绘制直线的API如下:
context2D.moveTo( p1.x, p1.y );
context2D.lineTo( p2.x, p2.y );
这样的调用大概循环了20来次吧。运行NumberAnimation发现渲染的性能有些下降,本来很流畅的画面变得不再流畅了。
现在暂时没有什么好的方法解决问题,毕竟画线的函数在QML中我发现只能利用Canvas了。再不行的话可能就要使用QML调用C++来绘制OpenGL的直线了。
上海Qt开发联盟,热忱地欢迎你的加入!
离线彩阳

只看该作者 1楼 发表于: 2014-07-14
我目前采取了另外一个方法实现:动态创建Rectangle,再加上Rectangle.rotation来设置它的旋转。因为非常细的Rectangle也相当于一条直线,而且性能上比Canvas刷新要高。再加上QML的绑定功能可以获得更好的效果。
上海Qt开发联盟,热忱地欢迎你的加入!
离线ch781609892

只看该作者 2楼 发表于: 2017-09-30
使用c++的类性能要好点。QQuickPaintedItem。Canvas 如果画的复杂,并且不停的repaint,效率就低了。
离线angelus

只看该作者 3楼 发表于: 2017-09-30
楼上正解,继承QQuickPaintedItem自定义qml显示控件,性能会达到最佳!

有时候自带qml会比较局限,比如显示图片只能用URL,不能直接接受QImage 或者Qpixmap类型的数据,就需要自己去实现显示组件!

快速回复
限100 字节
 
上一个 下一个