QT--QGraphicsObject的setRotation函数使用

本文探讨了从QT4.5升级到QT5.X版本过程中遇到的问题,特别是QGraphicsObject类rotate函数被setRotation函数替代后的使用差异。通过实例说明了如何正确使用setRotation函数实现连续旋转的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值