QT--QGraphicsObject的setRotation函数使用

xiaoxiao2021-02-27  213

之前使用的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; }}

转载请注明原文地址: https://www.6miu.com/read-10721.html

最新回复(0)