预期实现效果: 弹出该对话框后,鼠标的移动区域只能限定在该对话框的窗口内,不能移出窗口外;
代码如下: 运行结果为,按住鼠标左键不放,可以限定在窗口内,但是不按住左键,只有左边和上边的边框鼠标出不去,右边和下边的可以移出去,请大虾帮忙看看代码哪里有问题~~~
MainWindow初始化时,已经setMouseTracking(true); 但奇怪的是按住鼠标左键移动,pos值一直会打印,不按左键移动,pos值不打印~~~
void MainWindow::mouseMoveEvent( QMouseEvent * event )
{
printf("---pos.x = %d,y = %d--\n",
event->pos().x(),event->pos().y());
QPoint Maxpoint,cur;
QPoint curpoint;
cur.setX(this->width());
cur.setY(this->height());
Maxpoint = mapToGlobal(cur);
printf("---cur.x = %d,cur.y = %d,m.x=%d,m.y=%d--\n",
cur.x(),cur.y(),Maxpoint.x(),Maxpoint.y());
if(event->pos().x() > this->width()
|| event->pos().y() > this->height()
|| event->pos().x() < 0
|| event ->pos().y() < 0)
{
if(event->pos().x() > this->width())
{
printf("******************\n");
if(event->pos().y() < 0)
{
curpoint.setX(this->width());
curpoint.setY(0);
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
if(event->pos().y() > this->height())
{
curpoint.setX(this->width());
curpoint.setY(this->height());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
curpoint.setX(this->width());
curpoint.setY(event->pos().y());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
}
}
if(event->pos().x() < 0)
{
if(event->pos().y() < 0)
{
curpoint.setX(0);
curpoint.setY(0);
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
if(event->pos().y() > this->height())
{
curpoint.setX(0);
curpoint.setY(this->height());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
curpoint.setX(0);
curpoint.setY(event->pos().y());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
}
}
if(event->pos().y() > this->height())
{
if(event->pos().x() < 0)
{
curpoint.setX(0);
curpoint.setY(this->height());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
if(event->pos().x() > this->width())
{
curpoint.setX(this->width());
curpoint.setY(this->height());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
curpoint.setX(event->pos().x());
curpoint.setY(this->height());
QCursor::setPos(mapToGlobal(curpoint)) ;
}
}
}
if(event->pos().y() < 0)
{
if(event->pos().x() < 0)
{
curpoint.setX(0);
curpoint.setY(0);
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
if(event->pos().x() > this->width())
{
curpoint.setX(this->width());
curpoint.setY(0);
QCursor::setPos(mapToGlobal(curpoint)) ;
}
else
{
curpoint.setX(event->pos().x());
curpoint.setY(0);
QCursor::setPos(mapToGlobal(curpoint)) ;
}
}
}
}
else
{
QWidget::mouseMoveEvent(event);
}
}