bool MainWindow::eventFilter( QObject * object, QEvent * event ) { QScrollArea * scrollArea = ui->scrollArea; if ( object == scrollArea ) { if ( event->type() == QEvent::MouseButtonPress ) { QMouseEvent * mouseEvent = static_cast < QMouseEvent * > ( event ); if ( mouseEvent->button() == Qt::LeftButton ) { lastPos = mouseEvent->pos(); if( scrollArea->horizontalScrollBar()->isVisible() || scrollArea->verticalScrollBar()->isVisible() ) scrollArea->setCursor( Qt::ClosedHandCursor ); else scrollArea->setCursor( Qt::ArrowCursor ); } }else if ( event->type() == QEvent::MouseMove ) { QMouseEvent *mouseEvent = static_cast < QMouseEvent * > ( event ); if ( mouseEvent->buttons() == Qt::LeftButton ) { lastPos -= mouseEvent->pos(); int hValue = scrollArea->horizontalScrollBar()->value(); int vValue = scrollArea->verticalScrollBar()->value(); scrollArea->horizontalScrollBar()->setValue( lastPos.x() + hValue ); scrollArea->verticalScrollBar()->setValue( lastPos.y() + vValue ); lastPos = mouseEvent->pos(); } }else if ( event->type() == QEvent::MouseButtonRelease ) scrollArea->setCursor( Qt::ArrowCursor ); } return QWidget::eventFilter(object, event); }