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