我想创建一个QGraphicsView
,这将允许某人缩放当前的QGraphicsItem
以适合QGraphicsView
窗口的大小。缩放QGraphicsItem以适合QGraphicsView
我重写了QGraphicsItem
来创建一个自定义版本,并且我实现了一些方法,因此它知道已经缩放了多少(它总是与原始比例成比例,所以只有一个比例因子 - 宽度相同,高度)。
所以在scaleFactor
二传手我有以下几点:
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
S的一个。
第一次使用时效果很好 - 我的图像比视口大,并且它很好地缩小以适应窗口(至少宽度方向)。但是,如果我再次点击该按钮,则宽度和高度将返回相同的值scaleFactorX
和item
。
你可以在图像转换后改变boundingRect
吗?如果不是,我该怎么办?
如果我使用fitInView,这实际上是否缩放ITEM本身?请记住,如果我在场景中有多个项目,我实际上想要操纵具有焦点的单个项目以适合视图,而不仅仅是缩放,以便视图本身得到缩放以适合视图中的项目。 – Derek 2011-04-12 19:51:40
I没有意识到你确实想操纵单个项目的大小。那么'fitToView'不是答案。抱歉。然而,你的'setScaleFactor()'完全没有效果,因为它只是设置一个临时值。看到我的编辑缩放单个项目。 – 2011-04-12 21:59:52