【问题标题】:zooming GraphicsView with wheelEvent使用 wheelEvent 缩放 GraphicsView
【发布时间】:2013-03-29 22:03:16
【问题描述】:

我正在使用 wheelEvent 实现我的 QGraphicsView 的缩放

void View::wheelEvent(QWheelEvent *e)
{
    if (e->modifiers().testFlag(Qt::ControlModifier)){ // zoom only when CTRL key pressed

        int numSteps = e->delta() / 15 / 8;

        if (numSteps == 0) {
            e->ignore();
            return;
        }
        qreal sc = pow(1.25, numSteps); // I use scale factor 1.25
        this->zoom(sc);


        e->accept();
    }
}

和缩放项

void View::zoom(qreal scaleFactor)
{

     scale(scaleFactor, scaleFactor);

}

这里我不想缩小太深,我只需要它来限制缩放到某个点,我必须限制缩小所以我试图找到变换点

qreal
View::zoomScale() const
{
    return transform().m11();
}

但是有了这个我不能限制缩放。 请帮我找到解决方案。

【问题讨论】:

    标签: qt qgraphicsview


    【解决方案1】:

    您可以计算相对于“正常缩放”的缩放系数,并决定是否可以缩放。

    例如,你可以拿一个 QRect 作为参考,并在缩放后检查它的大小:

    void ClassA::scale(qreal scaleFactor) {
        QRectF(0, 0, 1, 1); // A reference
        qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(r).width(); // absolute zoom factor
        if ( factor > 20 ) { // Don't zoom more than 20x
            return;
        }
    
        this->scale(scaleFactor, scaleFactor);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多