当前位置: 代码迷 >> QT开发 >> QRect:contains函数有关问题
  详细解决方案

QRect:contains函数有关问题

热度:193   发布时间:2016-04-25 03:05:57.0
QRect::contains函数问题
两个问题
#include "mywidget.h"
#include<QtGui>


MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
{
    setMouseTracking(true);
    LineOfRect=false;
}
void MyWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::red,4);
    painter.setPen(pen);
    QRect rect(30,30,200,200);
    painter.drawRect(rect);
}

void MyWidget::setcursor()
{
    if(LineOfRect)
    {
        setCursor(Qt::OpenHandCursor);
    }
    else{
        setCursor(Qt::ArrowCursor);
    }
}

void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
    QRect rect(30,30,200,200);
    if(rect.contains(event->pos(),false))
    {
        LineOfRect=true;
    }
    else{
        LineOfRect=false;
    }
  setcursor();
    QString pos=QString("%1,%2").arg(event->pos().x()).arg(event->pos().y());
    QToolTip::showText(event->globalPos(),pos,this);
}



QRect::contains 函数帮助文档中:
bool QRect::contains ( const QPoint & point, bool proper = false ) const
Returns true if the given point is inside or on the edge of the rectangle, otherwise returns false. If proper is true, this function only returns true if the given point is inside the rectangle (i.e., not on the edge).
1.当proper为false时,当point在rect的边缘上应该也返回ture,但是我在上面的代码中鼠标在rect边缘上的时候鼠标形状并没有改变,而是当鼠标在rect内部时cursor才改变形状,为什么?
2.如果if语句改成    if(rect.contains(event->pos(),false)&&(!(rect.contains(event->pos(),ture)))) 可以实现当鼠标在rect边框上cursor形状改变么?
------解决思路----------------------

    if(rect.contains(event->pos(),false)&!(rect.contains(event->pos(),true)))

就可以了。当参数为false时,鼠标在边框和边框内返回为真