2010-11-27 77 views
0

假設我有一個QGrahicsRectItem item item.width = 10和item.height = 10。它的左上角在(0,0)。 item.BoundingRect()應返回RectF(0,0,9,9)而是它返回一個RectF(0,0,10,10)QGraphicsRectItem :: boundingRect()返回一個比它應該大1px的QRectF

您可以用下面的代碼進行測試:

QGraphicsRectItem* item = new QGraphicsRectItem(0,0,10,10); 
qDebug() << item->boundingRect().width();   // 10, OK 
qDebug() << item->boundingRect().height();   // 10, OK 
qDebug() << item->boundingRect().topLeft().x();  // 0, OK 
qDebug() << item->boundingRect().topLeft().y();  // 0, OK 
qDebug() << item->boundingRect().bottomRight().x(); // 10, WHY? should be 9 
qDebug() << item->boundingRect().bottomRight().y(); // 10, WHY? should be 9 

所以boundingRect()返回的寬度和11像素高度RectF,雖然寬度( )和身高()聲稱這兩個都是10。

怎麼了?

回答

0

我沒有看到任何錯誤的。我想像是這樣的(取代3爲3)

0 1 2 3 
0 |==|==|==| 
    | 1| 2| 3| 
1 |==|==|==| 
    | 1| 2| 3| 
2 |==|==|==| 
    | 1| 2| 3| 
3 |==|==|==| 

它有寬度和高度3,左下角是[3,3],是嗎? :)

編輯:

Here你可以看到它是如何實際計算的(注意,是它的計算方法不同,查閱QRect爲和QRectF由於歷史的原因(這就是文檔要求))。

QRect座標系和QRectF座標系。

+0

但是RectF仍然是11px寬而不是10.這不是一個透視問題,而是一個導致問題的事實。這纔是重點。如果我使用boundingRect()來捕捉我的10px項目中的鼠標事件,那麼我還將獲得與該項目相距1px的事件。 – problemofficer 2010-11-28 00:20:34

0

我想你在這裏混淆座標與數組。以上結果是正確的。

如果你離牆10米遠轉身去測量距離,你應該在10米遠的地方,對嗎?不是9--因爲在進行第一步之前,你無法進入牆內。這也意味着牆壁厚1米。

相關問題