【发布时间】:2011-08-04 00:17:25
【问题描述】:
我正在尝试创建一个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 是ImagePixmapItems 之一。
这在第一次时效果很好 - 我的图像比视口大,并且可以很好地缩小以适应窗口(至少在宽度方面)。但是,如果我再次点击该按钮,scaleFactorX 和 item 的宽度和高度将返回相同的值。
图片转换后可以更改boundingRect吗?如果没有,我该怎么办?
【问题讨论】:
标签: c++ qt qt4 qgraphicsview qgraphicsitem