记录qt窗口在拖动过程中出现的问题

问题描述:
在窗口拖动的过程中刚开始可以流畅的拖动窗口,但是一小会儿之后出现窗口拖不动的现象,或者按下鼠标在拖动区域内可以流畅拖动,但是按下鼠标朝一个方向拖动后,释放鼠标,按照此操作操作几次后,出现窗口拖不动的情况,但是过一会儿后窗口又可以被拖动。
发生问题的环境介绍:
在窗口中创建了一个场景qgraphicsScene,此场景为自定义场景,在自定义场景的构造函数中创建一个图形项,设置此图形项的属性:画笔的粗细,颜色等。在自定义场景中重写鼠标的按下,移动,释放事件。通过鼠标事件的响应可以实现场景中图形项的移动。
解决的方法:
通过输出信息判断图形项的rect其虽然在窗口中移动,但是其位置坐标变为了负值,此时便会出现拖不动的情况,另外,鼠标按下的点的坐标出现负值时也会出现上述拖不动的现象。故位置坐标有问题,由于是在一个窗口中拖动坐标,位置又出现负值,因此添加拖动过程中对边界的限制以及对鼠标按下的点的位置设置。
其添加的设置代码如下:

        if(ptTopLeft.x() < 0)
        {
            ptTopLeft.setX(0);
        }
        if(ptTopLeft.y() < 0)
        {
            ptTopLeft.setY(0);
        }
        if(ptTopLeft.x() > SMALL_W - m_rectSaved.width())
        {
            ptTopLeft.setX(SMALL_W - m_rectSaved.width());
        }
        if(ptTopLeft.y() > SMALL_H - m_rectSaved.height())
        {
            ptTopLeft.setY(SMALL_H - m_rectSaved.height());
        }

ptTopLeft是被拖动的图形项的左上角坐标,对其位置做出限制,避免了其值为负,场景移动的过程中越过其所在窗口边界。
对于鼠标按下的点的设置和上面基本差不多。

        if(mouseEvent->scenePos().x() < 0)
        {
            mouseEvent->scenePos().setX(0);
        }
        if(mouseEvent->scenePos().y() < 0)
        {
            mouseEvent->scenePos().setY(0);
        }
        if(mouseEvent->scenePos().x() > SMALL_W)
        {
            mouseEvent->scenePos().setX(SMALL_W);
        }
        if(mouseEvent->scenePos().y() > SMALL_H)
        {
            mouseEvent->scenePos().setY(SMALL_H);
        }

scenePos()获取的是按下点的场景坐标,当然在拖动过程中图形项和按下的点的坐标类型都为场景坐标,其中宏SMALL_H及SMALL_W为窗口的大小。
只做记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值