2013-03-29 38 views
0

进出口使用实施我的QGraphicsView的变焦wheelEvent缩放GraphicsView与wheelEvent

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

但与此我不能够限制变焦。 请帮我找到解决方案。

回答

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