1) Реализовано перемещение вью, используя нажатие кнопки мыши. Перемещение происходит какими-то рывками, хочется добиться более плавного эффекта. Как возможно это реализовать?
2) При нажатии кнопки мыши изображение курсора не изменяется. Почему?
Текущий код:
class MapGraphicView: public QGraphicsView
{
...
protected:
QPointF center; // The center of visible area
QPointF fixedPoint; // Fixation point (for scrolling)
void setCenter (const QPointF& centerPoint);
QPointF getCenter ();
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
...
};
void MapGraphicView::mousePressEvent(QMouseEvent *event)
{
fixedPoint = event->pos();
setCursor(Qt::ClosedHandCursor);
QGraphicsView::mousePressEvent(event);
}
void MapGraphicView::mouseReleaseEvent(QMouseEvent *event)
{
fixedPoint = QPoint ();
setCursor(Qt::OpenHandCursor);
QGraphicsView::mouseReleaseEvent(event);
}
void MapGraphicView::mouseMoveEvent(QMouseEvent *event)
{
if (!fixedPoint.isNull())
{
QPointF offset = mapToScene(fixedPoint.toPoint()) - mapToScene(event->pos());
fixedPoint = event->pos();
setCenter(getCenter() + offset);
setCursor(Qt::ClosedHandCursor);
}
QGraphicsView::mouseMoveEvent(event);
}
void MapGraphicView::setCenter(const QPointF ¢erPoint)
{
QRectF visibleArea = mapToScene(rect()).boundingRect(); // Border of the visible area
QRectF sceneBounds = sceneRect(); // Scene's border
double boundX = visibleArea.width()/2.0;
double boundY = visibleArea.height()/2.0;
double boundWidth = sceneBounds.width() - visibleArea.width();
double boundHeight = sceneBounds.height() - visibleArea.height();
QRectF bounds (boundX, boundY, boundWidth, boundHeight);
center = centerPoint;
if (!bounds.contains(centerPoint))
{
if (visibleArea.contains(sceneBounds))
{
center = sceneBounds.center();
}
else
{
if (centerPoint.x() > bounds.x() + bounds.width())
center.setX(bounds.x() + bounds.width());
else if (center.x() < bounds.x())
center.setX(bounds.x());
if (centerPoint.y() > bounds.y() + bounds.height())
center.setY(bounds.y() + bounds.height());
else if (centerPoint.y() < bounds.y())
center.setY(bounds.y());
}
centerOn(center);
}
}
QPointF MapGraphicView::getCenter()
{
return center;
}
Заранее спасибо!