QGraphicsView视图放大缩小 场景内图元同步缩放 鼠标滚轮事件实现

直接上代码:

.h

class CustomView : public QGraphicsView
{
    Q_OBJECT

public:
    CustomView (QGraphicsView *parent = 0);
    ~CustomView ();

    void ZoomIn(qreal detla);
    void ZoomOut(qreal detla);
    void Zoom(float sfactor);

protected:
    virtual void wheelEvent(QWheelEvent * event);

public:
    float m_delta = 0.1;
};

.cpp

void CustomView ::ZoomIn(qreal detla)
{
    Zoom(1 - detla);
}

void CustomView ::ZoomOut(qreal detla)
{
    Zoom(1 + detla);
}

void CustomView ::Zoom(float sfactor)
{
    qreal scalefactor = transform().scale(sfactor, sfactor).mapRect(QRectF(0, 0, 1, 1)).width();
    if (scalefactor < 0.2 || scalefactor>2)
        return;
    scale(sfactor, sfactor);
}

void CustomView ::wheelEvent(QWheelEvent * event)
{
    int value = event->delta();
    if (value > 0)
    {
        //放大
        ZoomOut(m_delta);
    }
    else
    {
        //缩小    
        ZoomIn(m_delta);
    }

    QGraphicsView::wheelEvent(event);
}

以上。

你可能感兴趣的:(QT)