之前使用的QT版本是QT4.5,而现在QT升级了,升级到QT5.X版本,好多函数都进行调整,而且文档写的也不是很清楚,总之好麻烦。
最近在升级之前的一套代码,里面用的了QGraphicsObject类的rotate(qreal angle)函数,该函数的功能很简单,就是根据输入的角度值,使对应的QGraphicsObject对象旋转。这个函数很好用的,不明白为什么到了QT5.X版本,就给去掉了,取而代之的是setRotation(qreal angle)函数,结果替换完之后死活不起作用。
替换完之后,第一次转换是没有问题的,但是后续就不行了。查了好多资料才发现,该函数没有记忆功能,永远都是在初识transform模式下,旋转对应角度。
比如:
如果对象初始角度为0
第一次调用setRotation(90.0); //对象会旋转90度。
第二次再次调用setRotation(90.0); //还是从初始角度开始旋转90度,因此和第一次相比,旋转角度不变。
因此如果希望让对象旋转两次,每次旋转90度,则需要如下调用:
setRotation(90.0); //旋转90度
setRotation(180.0); //旋转180度,即在之前基础上旋转90度。
正确使用方法如下:
void BoxGroup::keyPressEvent(QKeyEvent *event)
{//定义个static 局部变量保存当前的角度值,当旋转时,以当前角度值为起始值static qreal angle = 0;switch(event->key()){
case Qt::Key_Up: //旋转方向setRotation(angle+90.0);angle = angle+90.0;if(isColliding()){
setRotation(angle-90.0);angle = angle-90.0;}
break;}
}