2015-02-06 17 views
0

我創建了一個自定義的qGraphicsRectItem,我添加到我的qGraphicsScene。我想使用其本地座標將文本添加到此自定義矩形中(即,無論將其添加到我的場景中的哪個位置,都將其添加到0,0將項目放在我的矩形的原點處) 當我嘗試這樣做時,它會使用我的場景的座標系和文本出現在矩形外。有任何想法嗎?如何使用本地座標到QGraphicsItem

PackageRect::PackageRect(QString PackageName, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent) 
    :QGraphicsRectItem(x, y, w, h, parent) 
{ 

    QGraphicsTextItem *text = new QGraphicsTextItem(PackageName, this); 
    text->setPos(0,0); 
} 

回答

0

你正在嘗試做什麼,往往會用在「分組」項目中。

有幾個mapTo*功能,包括:

http://doc.qt.io/qt-5/qgraphicsitem.html

QPointF mapToItem(const QGraphicsItem * item, const QPointF & point) const 
QPointF mapFromItem(const QGraphicsItem * item, const QPointF & point) const 
QPointF mapFromScene(const QPointF & point) const 
QPointF mapToScene(const QPointF & point) const 

基本上上下文您呼叫的變化映射函數映射調用的行爲。

如果您在QGraphicsItem的子類中,並且您調用this->mapToItem(myRect, QPointF(0,0));,它將返回一個根據矩形的座標系統的值。

同樣,如果您在QGraphicsItem的子類中,並且您調用this->mapFromItem(myRect, QPointF(0,0));它將返回原始項的座標系的值,其中0,0是該矩形的左上角。

這裏的座標系更多的文檔:

http://doc.qt.io/qt-5/graphicsview.html#the-graphics-view-coordinate-system

但如果你是在一個QGraphicsView,他們組分組對象和周圍移動的組。

http://doc.qt.io/qt-5/graphicsview.html#item-groups

http://doc.qt.io/qt-5/qgraphicsitemgroup.html#details

希望有所幫助。

0

對於setPos do make 0,0 but x,y。 適用於我:

rectText::rectText(QString PackageName, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent) 
    :QGraphicsRectItem(x, y, w, h, parent) 
{ 
    QGraphicsTextItem *text = new QGraphicsTextItem(PackageName, this); 
    text->setPos(x, y); 
} 

文本框內。

+0

使用x和y座標您無所謂,場景中的框位於矩形的原點處。 – 2015-02-06 23:35:48

+0

事實上,它使用場景的座標系而不是物品的本地座標系。 – user1337 2015-02-08 02:12:46

相關問題