Qt - 使用QSlider放大/缩小

时间:2016-07-20 07:50:14

标签: c++ qt slider zoom qgraphicsview

我想为QGraphicsView整合缩放滑块。我使用QGraphicsView::scale()进行缩放。

这是我的代码:

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

我的最小滑块值为1,最大值为200,当值为100时,根据我的函数,我的scaleFactor为1。但是如果scaleFactor大于1,则滑块始终放大。例如,当我从150更改值时到149,它应该缩小但不是因为缩放因子大于1。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

ui->graphicsView->scale()相对操作。 下面是我的on_ZoomSliderValueChanged(int value),可以根据当前滑块位置对QGraphicsView进行缩放。 希望它会对你有帮助(你可能想根据你想要的曲线重新计算newScale):

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