使用 QSlider 放大和缩小 Qgraphicsscene

the zoom in and zoom out a Qgraphicsscene with QSlider

我有一个 QGraphicsScene,我想用 QSlider 进行缩放(放大和缩小),我有这个代码:

void fonction(){
    Scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(Scene);
    QPen Pen ;
    QBrush Brush(Qt::red) ;
    Pen.setWidth(5);
    ellipse = Scene->addEllipse(2,2,30,30,Pen,Brush);
}


void HomePage::on_verticalSlider_valueChanged(int value)
{
    float z ;
    if(value==0 )
        z=0.1;
    else
        z  = value*0.01;

    Scene->update();
    ui->graphicsView->transform();
    ui->graphicsView->scale(z,z);
}

QSlider的区间为[0.1 -> 1] 我的问题是缩小不起作用,为什么? 我该如何解决这个问题?

你的问题是控制场景视图的矩阵不会重置滑块的每个更新,它只是一个 运行 乘法。一种简单的方法是将当前值保存在 HomePage 的成员变量中(我们称它为 m_current_scale),然后在执行另一个缩放之前撤消缩放。

void HomePage::on_verticalSlider_valueChanged(int value)
{
    float z ;
    if(value==0 )
        z=0.1;
    else
        z  = value*0.01;

    Scene->update();
    ui->graphicsView->transform();

    const double scale_inverse = 1.0 / (double)m_current_scale;
    ui->graphicsView->scale(scale_inverse, scale_inverse);
    m_current_scale = z;

    ui->graphicsView->scale(z,z);
}