我正在尝试创建一个
我已经覆盖了
因此,在
QGraphicsView
,使其能够缩放当前的QGraphicsItem
以适应QGraphicsView
窗口的大小。我已经覆盖了
QGraphicsItem
以创建自定义版本,并实现了一些方法,使它知道自己被缩放了多少(这总是与原始比例成比例,因此只有一个比例因子 - 宽度和高度相同)。因此,在
scaleFactor
setter中,我有以下内容:void ImagePixmapItem::setScaleFactor(float sf){
scaleFactor = sf;
this->boundingRect().setWidth(this->boundingRect().width()*scaleFactor);
this->boundingRect().setHeight(this->boundingRect().height()*scaleFactor);
}
在我的主表单中,我有一个按钮,其中包含以下内容:
QRect portRect = ui->graphicsView->viewport()->rect();
double scaleFactorX;
if(portRect.width() <= (item->boundingRect().size().width()))
scaleFactorX =portRect.width() /(item->boundingRect().size().width());
else
scaleFactorX = (item->boundingRect().size().width())/portRect.width();
qDebug("Scalefactor: %4.3f \n", scaleFactorX);
qDebug("item width: %4.3f \n", item->boundingRect().size().width());
qDebug("item height: %4.3f \n", item->boundingRect().size().height());
item->setScaleFactor(scaleFactorX);
item->scale(scaleFactorX,scaleFactorX);
其中item
是那些ImagePixmapItem
之一。
第一次使用时效果很好 - 我的图像比视口大,它可以很好地缩小以适应窗口(至少在宽度方面)。但是,如果我再次点击按钮,则会返回相同的scaleFactorX
和item
宽度和高度的值。
您能否在转换后更改图像的boundingRect
?如果不能,我该怎么办?
fitToView
不是答案。抱歉。然而,你的setScaleFactor()
没有任何效果,因为它只是设置了一个临时值。请看我的编辑以缩放单个项目。 - Stephen Chu