QT--QGraphicsObject的setRotation函数使用

来源:互联网 发布:软件开发年终总结范文 编辑:程序博客网 时间:2024/05/22 08:25

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


原创粉丝点击