我想創建一個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