4

I have a QGraphicsView widget with lots of items on scene. I am panning the view on ctr+left mouse click and zooming it to rectangle of rubber band created with left mouse button drag. I am not able to see rubber band selection rectangle (dotted lines) whereas rubberband selection functionality works fine. Can anybody help me understand this?.
I use these flags in my view:

setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
setRenderHints(QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform);
setOptimizationFlag(QGraphicsView::DontSavePainterState,true);
setCacheMode(QGraphicsView::CacheBackground);
setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing);
setViewport(new QGLWidget);

below are my event handlers.

Mouse press event handler:

void MyView::mousePressEvent(QMouseEvent* event)
{
    if(event->button()==Qt::LeftButton)
    {       
        if(event->modifiers()==Qt::ControlModifier)
        {
            setDragMode(QGraphicsView::NoDrag);
            m_rubberBandActive = false;         
            mousepressed=true;
            m_lastDragPos = event->pos();
            return;
        }
        else
        {           
            setDragMode(QGraphicsView::RubberBandDrag);
            m_rubberBandOrigin = event->pos();
            m_rubberBandActive = true;
        }
    }   
    event->accept();
   }
   else
   {    
      QWidget::mousePressEvent(event);
   }    
}

Mouse move event:

void MyView::mouseMoveEvent(QMouseEvent* event)
{
if(mousepressed)
{
    QPointF delta = mapToScene(event->pos()) - mapToScene(m_lastDragPos);
    this->panView(delta);
    m_lastDragPos = event->pos();   
    return;
}
event->accept();
}

Mouse release event Handler:

void MyView::mouseReleaseEvent(QMouseEvent *event)
{
if (m_rubberBandActive)
{
    QPoint rubberBandEnd = event->pos();        
    QRectF zoomRectInScene = QRectF(mapToScene(m_rubberBandOrigin),mapToScene(rubberBandEnd));

    fitInView(zoomRectInScene, Qt::KeepAspectRatio);
    m_rubberBandActive = false;
}

mousepressed=false;
event->accept();
}

Pan view:

void MyView::panView(QPointF delta)
{
    QPoint viewCenter(viewport()->width() / 2 + delta.x(), viewport()->height() / 2 + delta.y());
    QPointF newCenter = mapToScene(viewCenter);
    centerOn(newCenter);
}
Angie Quijano
  • 4,167
  • 3
  • 25
  • 30
TRS
  • 1,947
  • 4
  • 26
  • 49
  • I had problems like this, I ended up implementing my own ctrl+left button panning, and my own left button rubber band rect with auto scroll :( – paulm Apr 03 '13 at 12:01
  • I got more convincing answer here.. http://www.qtcentre.org/threads/53944-QgraphicsView-rubber-band-selection-rectangle-not-visible?p=241615&highlight=#post241615 – TRS Apr 04 '13 at 06:07

0 Answers0