2011-01-21 61 views
3

我想弄清楚如何在QGraphicsView中看到的像素與QGraphicsItem在圖像中的實際像素之間的映射。例如,如果我的查看器是50x50並且圖像是100x100,那麼當圖像加載並且未被修改時,圖像的0,0像素對應於查看器的0,0像素。找出QGraphicsItem在QGraphicsView中可見的部分

現在,如果我將圖像拖到右側10像素,圖像左上角的0,0像素現在位於(10,0),並且我只能看到原始圖像的10-40列。另外,如果我縮放以縮小圖像,使QGraphicsView區域的圖像更小,圖像的0,0可能映射到10,0的查看器,但100,100的圖像可能只映射到40, 40,因爲我縮小了它。

我知道QGraphicsItem有很多映射函數,但我不確定如何檢測哪些部分是可見的,以及如何執行Item,Scene和View之間的映射。

感謝所有幫助

對於reference..so遠,這裏是啥子我曾嘗試: 獲取物件形狀 從現場使用視圖 得到邊界矩形形狀映射到現場 MAPE路徑,找到那

結束了使用類似下面的左上角:

QRect portRect = ui->graphicsView->viewport()->rect(); 
    QRectF sceneRect = ui->graphicsView->mapToScene(portRect).boundingRect(); 
    QRectF itemRect = item->mapRectFromScene(sceneRect); 

    QRectF isec = itemRect.intersected(item->boundingRect()); 

感謝朱棣文

回答

2
QRect portRect = yourGraphicsView->viewPort()->rect(); 
QRectF sceneRect = yourGraphicsView->mapToScene(portRect); 
QRectF itemRect = yourItem->mapRectFromScene(sceneRect); 

你可能想要做所產生的矩形的intersection與您的項目的實際RECT自視可能比bt後的項目大。

+0

你是否指portRect與itemRect的交集? – Derek 2011-01-22 16:32:20