今天要做一个限制鼠标出去自己的窗口的功能,应用在一个考试的系统上面,目的是当考生没有提交答案之前,鼠标不能厉害窗口
Qt事件中有一个 QEvent::HoverLeave 事件,当鼠标离开widget时候就会收到这个事件,但是一定要在构造函数里面加上
setAttribute(Qt::WA_Hover); 否则不会产生效果,
bool MouseWidget::event(QEvent *event)
{
if(event->type() == QEvent::HoverLeave)
{
mapPoint = mapToGlobal(QPoint(0,0)); //窗口的(0,0)坐标相对屏幕的坐标
QHoverEvent * hoverEvent = static_cast<QHoverEvent*>(event);
point = hoverEvent->oldPos(); //鼠标离开窗口时候的坐标
QCursor::setPos(mapPoint.x() + point.x(), mapPoint.y() + point.y());
}
return QWidget::event(event);
}
鼠标离开或者进入 Widget都会有相应的事件 例如
void leaveEvent(QEvent *);
void enterEvent(QEvent *);
但是QEvent::HoverLeaver 可以捕捉到 最后一个坐标, oldPos();所以选择 上述实现方式