2009-07-20 66 views
7

我一直在玩弄這段代碼:爲什麼的QGraphicsItem :: scenePos()回頭率(0,0)

QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100); 
qDebug() << anotherLine->scenePos(); 

QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300); 
qDebug() << anotherLine2->scenePos(); 

this指針指QGraphicsScene。在這兩種情況下,我都得到了QPointF(0,0)兩種輸出。
從閱讀文檔中,我認爲scenePos()應該返回場景中線的位置,而不是它在本地座標系內的位置。我究竟做錯了什麼?

回答

17

在仔細閱讀了addLine上的QT 4.5文檔後,我意識到自己做錯了什麼。據商務部:

需要注意的是該項目的幾何形狀在項目協調提供 ,其 位置被初始化爲(0,0)

所以,如果我指定addLine(50,50 ,100,100),我實際上修改了它的本地項目座標。我認爲它將被視爲場景座標的假設是錯誤的或毫無根據的。我應該做的就是這個

// Create a line of length 100 
QGraphicsItem * anotherLine = addLine(0,0, 100, 100); 

// move it to where I want it to be within the scene 
anotherLine->setPos(50,50); 

所以,如果我被場景中繪製添加行,我需要重置其中心爲(0,0),然後使用setPos()將其移動到哪裏希望它在現場。

希望這可以幫助任何人發現同樣的問題。

+0

我花了一個下午狩獵這件事!非常感謝! (即使這個線程是3歲) – HWende 2012-06-20 14:01:22

相關問題