Qt - 使用 QSlider 缩放 in/out
Qt - zoom in/out with QSlider
我想为 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 根据我的 function.But 如果 scaleFactor 大于 1,滑块总是放大。例如,当我将值从 150 更改为 149,它应该缩小但不是,因为缩放因子大于 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);
}
我想为 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 根据我的 function.But 如果 scaleFactor 大于 1,滑块总是放大。例如,当我将值从 150 更改为 149,它应该缩小但不是,因为缩放因子大于 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);
}