увеличение и уменьшение масштаба Qgraphicsscene с помощью QSlider

#c #qt #qgraphicsview #qgraphicsscene

#c #qt #qgraphicsview #qgraphicsscene

Вопрос:

У меня есть a QGraphicsScene , и я хочу увеличивать и уменьшать масштаб с помощью a 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]
Моя проблема в том, что уменьшение масштаба не работает, почему?
как мне решить эту проблему?

Ответ №1:

Ваша проблема в том, что матрица, управляющая видом сцены, не сбрасывает каждое обновление ползунка, это просто текущее умножение. Простым подходом было бы сохранить текущее значение в переменной-члене для домашней страницы (назовем его 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);
}