Доброе утро!
В общем, есть виджет PhotoFormatter, предназначенный для обрезки краёв фотографии. Может встраиваться в отдельный диалог, а может и в главное окно, в GraphicsView. При наведении курсора на края выделенной области он меняется, соответственно, на разные стрелки ресайза. А при наведении на выделенную область - на OpenHand, для перемещения выделенной области. Так вот, в случае диалога это срабатывает идеально, при работе в GraphicsView - курсор почти всегда не меняется. С чем это может быть связано?
Вот код функции определения вида курсора:
PhotoFormatter::Enm_CursorPosition PhotoFormatter::getCursorPosition(const QPoint &pt)
{
if ( pt.x() > areaRect.left()+3 &&
pt.y() > areaRect.top() + 3 &&
pt.x() < areaRect.right()-6 &&
pt.y() < areaRect.bottom()-6)
{
setCursor(Qt::OpenHandCursor);
return PhotoFormatter::curpos_inRect;
}
if ( pt.y() > areaRect.top() + 2 &&
pt.y() < areaRect.bottom() - 2 &&
pt.x() > areaRect.left() - 2 &&
pt.x() < areaRect.left() + 2)
{
setCursor(Qt::SizeHorCursor);
return PhotoFormatter::curpos_leftBorder;
}
if ( pt.y() > areaRect.top() + 2 &&
pt.y() < areaRect.bottom() - 2 &&
pt.x() > areaRect.right() - 2 &&
pt.x() < areaRect.right() + 2)
{
setCursor(Qt::SizeHorCursor);
return PhotoFormatter::curpos_rightBorder;
}
if ( pt.x() > areaRect.left() + 2 &&
pt.x() < areaRect.right() - 2 &&
pt.y() > areaRect.top() - 2 &&
pt.y() < areaRect.top() + 2)
{
setCursor(Qt::SizeVerCursor);
return PhotoFormatter::curpos_topBorder;
}
if ( pt.x() > areaRect.left() + 2 &&
pt.x() < areaRect.right() - 2 &&
pt.y() > areaRect.bottom() - 2 &&
pt.y() < areaRect.bottom() + 2)
{
setCursor(Qt::SizeVerCursor);
return PhotoFormatter::curpos_bottomBorder;
}
if ( pt.x() > areaRect.left() - 2 &&
pt.x() < areaRect.left() + 2 &&
pt.y() > areaRect.top() - 2 &&
pt.y() < areaRect.top() + 2)
{
setCursor(Qt::SizeFDiagCursor);
return PhotoFormatter::curpos_leftTopCorner;
}
if ( pt.x() > areaRect.left() - 2 &&
pt.x() < areaRect.left() + 2 &&
pt.y() > areaRect.bottom() - 2 &&
pt.y() < areaRect.bottom() + 2)
{
setCursor(Qt::SizeBDiagCursor);
return PhotoFormatter::curpos_leftBottomCorner;
}
if ( pt.x() > areaRect.right() - 2 &&
pt.x() < areaRect.right() + 2 &&
pt.y() > areaRect.top() - 2 &&
pt.y() < areaRect.top() + 2)
{
setCursor(Qt::SizeBDiagCursor);
return PhotoFormatter::curpos_rightTopCorner;
}
if ( pt.x() > areaRect.right() - 2 &&
pt.x() < areaRect.right() + 2 &&
pt.y() > areaRect.bottom() - 2 &&
pt.y() < areaRect.bottom() + 2)
{
setCursor(Qt::SizeFDiagCursor);
return PhotoFormatter::curpos_rightBottomCorner;
}
setCursor(Qt::ArrowCursor);
return PhotoFormatter::curpos_behind;
}
Сообщение отредактировал Litkevich Yuriy - 1.10.2009, 6:06
Эскизы прикрепленных изображений