• 5769阅读
  • 1回复

贴上代码,再次请教下限制鼠标移动区域问题 [复制链接]

上一主题 下一主题
离线kerry_wei
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-19
预期实现效果:  弹出该对话框后,鼠标的移动区域只能限定在该对话框的窗口内,不能移出窗口外;

代码如下:  运行结果为,按住鼠标左键不放,可以限定在窗口内,但是不按住左键,只有左边和上边的边框鼠标出不去,右边和下边的可以移出去,请大虾帮忙看看代码哪里有问题~~~

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);
    }
}
离线kerry_wei
只看该作者 1楼 发表于: 2010-03-19
有没有哪位大侠知道?
快速回复
限100 字节
 
上一个 下一个