2016-07-20 1 views
0

Je souhaite intégrer un curseur de zoom pour un QGraphicsView. J'utilise QGraphicsView::scale() pour zoomer.Qt - zoom avant/arrière avec QSlider

Voici mon code:

void MainWindow::on_sld_zoom_valueChanged(int value) 
{ 
    ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorViewCenter); 
    double scaleFactor; 
    scaleFactor = pow(1.1,((value - 100)/100.0)); 
    ui->graphicsView->scale(scaleFactor,scaleFactor); 
} 

Mon min valeur du curseur est 1, max est de 200 et lorsque la valeur est 100, mon scaleFactor est 1 selon mon function.But si scaleFactor est plus grand que 1, curseur Toujours effectuer un zoom avant. Par exemple, lorsque je change la valeur de 150 à 149, le zoom doit être réduit, mais pas le zoom.

Comment résoudre ce problème?

Répondre

1

ui->graphicsView->scale() est action relative. Ci-dessous est mon on_ZoomSliderValueChanged(int value) qui ajuste QGraphicsView en fonction de la position actuelle du curseur. espère que cela vous aidera (vous voudrez probablement recalcule newScale selon votre courbe désirée):

void PictureWindow::on_ZoomSliderValueChanged(int value) 
{ 
    qreal newScale = qPow(m_pPimpl->m_ZoomFactor, value); 

    QMatrix matrix; 
    matrix.scale(newScale, newScale); 

    ui->graphicsView->setResizeAnchor(QGraphicsView::ViewportAnchor(m_pPimpl->m_ViewportAnchor)); 
    ui->graphicsView->setMatrix(matrix); 
} 
+0

Il s travail, merci !! –