QGraphicsView橡皮筋选择矩形不可见

时间:2013-03-27 05:06:46

标签: qt qgraphicsview qgraphicsitem qgraphicsscene

我有一个QGraphicsView小部件,里面有很多项目。我正在平移ctr +左键单击视图并将其缩放到用鼠标左键拖动创建的橡皮筋矩形。我无法看到橡皮筋选择矩形(虚线),而橡皮筋选择功能正常。任何人都可以帮我理解这个吗?。我在我看来使用这些标志:

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

是我的事件处理程序。

鼠标按下事件处理程序:

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);
   }    
}

鼠标移动事件:

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();
}

鼠标释放事件处理程序:

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();
}

平移视图:

void MyView::panView(QPointF delta)
{
    QPoint viewCenter(viewport()->width() / 2 + delta.x(), viewport()->height() / 2 + delta.y());
    QPointF newCenter = mapToScene(viewCenter);
    centerOn(newCenter);
}

0 个答案:

没有答案
相关问题