使用 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);
}
我有一个 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);
}