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

您所在的位置:网站首页 拖拽窗口时出现一堆卡屏 记录qt窗口在拖动过程中出现的问题

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

2024-06-29 23:44| 来源: 网络整理| 查看: 265

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

if(ptTopLeft.x() SMALL_H - m_rectSaved.height()) { ptTopLeft.setY(SMALL_H - m_rectSaved.height()); }

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

if(mouseEvent->scenePos().x() scenePos().setX(0); } if(mouseEvent->scenePos().y() 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为窗口的大小。 只做记录。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3