本文共 1211 字,大约阅读时间需要 4 分钟。
Qt自动捕捉光标位置所知道的有两种情况:
1.QWidget主窗体或主窗体的某一部件捕捉鼠标位置 mouseTracking(bool): 此属性保存是否为小部件启用鼠标跟踪,如果禁用了鼠标跟踪(默认),那么小部件只在移动鼠标时按下至少一个鼠标按钮时接收鼠标移动事件。如果启用了鼠标跟踪,即使没有按下按钮访问功能,小部件也会接收鼠标移动事件bool hasMouseTracking()。 给ui界面的graphicsView部件添加自动捕捉鼠标:ui->graphicsView->setMouseTracking(true);//跟踪鼠标
如果鼠标控件发生移动,会触发鼠标移动函数mouseMoveEvent,我们将这个函数重写我们需要的功能就可以了,比如发送一个信号。
void mouseMoveEvent(QMouseEvent *event){ emit sendsignal(even->pos());//sendsignal是一个信号,需要在.h文件中定义 signal:void sendsignal();}
2.模型视图框架(场景,视图,图元)捕捉鼠标位置
void QGraphicsItem::setAcceptHoverEvents(bool enabled)
如果启用为真,此项目将接受悬停事件;否则,不接受。默认情况下,项目不接受悬停事件。当当前没有鼠标抓取项时,将传递悬停事件。当鼠标光标进入一个项目时,当它在项目内移动时,以及当光标离开一个项目时,它们都会被发送。鼠标悬停事件通常用于在项目输入时突出显示它,以及在鼠标悬停在项目上时跟踪鼠标光标(相当于QWidget:mouseTracking)。自动调用的函数有hoverEnterEvent()、hoverMoveEvent()和hoverLeaveEvent()。
这个是Qt模型视图框架的功能,使用时需要通过QGraphicsItem类获取图元坐标,并且将这个功能设置为true。它属于QGraphicsItem类
QGraphicsItem pixmapItem = new QGraphicsItem;pixmapItem.setAcceptHoverEvents(true);
注意setAcceptHoverEvents()的自动调用函数是hoverEnterEvent()、hoverMoveEvent()和hoverLeaveEvent()。这三个,其中hoverMoveEvent()是捕捉鼠标移动的函数。
我们可以重写这个函数去捕捉鼠标坐标void ImageWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event){ emit mouseMoveEventChage(event->pos());}
具体示例:
如有不到之处,请联系指出,感谢指导!转载地址:http://neezi.baihongyu.com/