3

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

0 に答える 0