2013-03-29 64 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); 
}