标题:关于Qt5中dialcontrol代码实现
作者:兵317
日期:2016-06-15 17:33
内容:
请问大家,Qt5里面自带的dialcontrol(qml写的)例子,用滑动条控制指针的旋转运行,过程很流畅,一点都不生硬,部分核心代码如下:
//!
//!
Image {
id: needle
x: 98; y: 33
antialiasing: true
source: "needle.png"
transform: Rotation {
id: needleRotation
origin.x: 5; origin.y: 65
//!
angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133)
Behavior on angle {
SpringAnimation {
spring: 1.4
damping: .15
}
}
//!
}
}
红色字体部分代码(Behavior on angle...SpringAnimation...)应该是其运行很流畅的关键所在,但我不知道它用C/C++是怎么实现的,一点资料都没搜到,我也不知道怎么直接在C++中用上它来达到同样的流畅效果。 ..
#1 [兵317 06-15 18:01]
以下是分别运行dialcontrol和painter5的截图
#2 [马侬骑士 06-16 08:50]
SpringAnimation是弹簧动画
骚年没事多 看看帮助文档
SpringAnimation QML Type
Allows a property to track a value in a spring-like motion More...
#3 回 马侬骑士 的帖子 [兵317 06-16 09:17]
马侬骑士:SpringAnimation是弹簧动画
骚年没事多 看看帮助文档
SpringAnimation QML Type
Allows a property to track a value in a spring-like motion More...
(2016-06-16 08:50)
知道是那个,我的意思是怎样用C/C++实现那种效果
#4 [马侬骑士 06-16 17:00]
无非是实现动画效果方法很多,但是你要是非要用这种panter进行的话,感觉稍微不好操作,不过也是有办法,参看(The Animation Framework )
1、QTimeLine根据时间轴计算你的实时angle
2、QVariantAnimation动画生成你的实时angle
建议改写实现
1、用QPropertyAnimation动画实现 ,参考easing例子用场景布置,QGraphicsPixmapItem进行动画属性rotation属性
2、 QStateMachine 设置不同角度的状态,然后状态过度
#5 回 马侬骑士 的帖子 [兵317 06-17 08:51]
马侬骑士:无非是实现动画效果方法很多,但是你要是非要用这种panter进行的话,感觉稍微不好操作,不过也是有办法,参看(The Animation Framework )
1、QTimeLine根据时间轴计算你的实时angle
2、QVariantAnimation动画生成你的实时angle
建议改写实现
....... (2016-06-16 17:00)
嗯,谢谢,时间线用了,但效果不理想,中间有停顿现象。其他的你说的这些只是大概有个一面之缘,不甚了解,我查查资料,试试。