2016-03-11 83 views
0

我試圖創建將在與角蛋白文本(存儲在屬性)場景中繪製的自定義對象(矩形,它從QGraphicsItem繼承),但是當我縮放它時 - 我希望保留相同的文字大小。這是我的結局。塗料功能:Qt使用未縮放文本縮放自定義QGraphicsItem

void CustomRectangle::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget) 
    { 
     QColor currentColor = get_ColorByCurrentState(); 

     QRectF rect = boundingRect(); 
     QPen pen(currentColor, Own_LineWidith); 

     painter->setPen(pen); 
     painter->drawRect(rect); 

     QRectF rect_text(rect.x(), rect.y(),100,100); 
     painter->drawText(rect_text,this->getText()); 
    } 

和我的兩個縮放功能:

void CustomObject::scaleUp() 
    { 
     scale(ScaleFactor_X,ScaleFactor_Y); 
    } 

    void CustomObject::scaleDown() 
    { 
     scale(1/ScaleFactor_X,1/ScaleFactor_Y); 
    } 

但仍文本保持與矩形縮放一起。

編輯1 我嘗試添加另一種方式,我nfucntion創建,並增加了我的矩形場景(在這裏 - 一個名爲「NEWOBJECT」),但結果還是一樣。

QGraphicsTextItem* GTI = new QGraphicsTextItem(newObject->toStringForScene(), newObject); 

我開始認爲我應該創建每個文本對象作爲分離的對象並保存它不同的列表。 Ofcours,我不得不更新它,每當它的對象被移動。

回答

0

我解決了這個與QGraphicsTextItem的poitner作爲類的屬性。

QGraphicsTextItem* GTI; 

我initialzie它在構造函數中:

GTI_Description = new QGraphicsTextItem(this->toStringForScene()); 

,然後我打電話的功能更新,它的X和Y:

void updateTextPosition() 
{ 
    GTI->setX(this->x()); 
    GTI->setY(this->y()); 
} 

,並把它添加到場景:

addTextToScene(DragScene* _scene) 
{ 
    updateDescriptionPosition(); 
    _scene->addItem(GTI_GTI); 
    _scene->update(); 
} 

然後我只是調用updateTextP osition()whenerver我改變職位(在我的mouseRelease事件的處理程序中)。

1

試試這個:

QGraphicsTextItem* gti = new QgraphicsTextItem("text"); 
gti->setFont(QFont("Arial", 18)); 

// this is important 
gti->setFlag(QGraphicsTextItem::ItemIgnoresTransformations, true); 

scene->addItem(gti); 

QGraphicsItem::ItemIgnoresTransformations標誌可防止當您縮放視圖(的QGraphicsView)進行縮放你的圖形項。

這意味着你需要一個分離的項目來渲染文本。但它可以是您的矩形項目的子項目

+0

這沒有工作得很好,因爲我的預期。它忽略正確地向上/向下縮放其父對象,而且 - 忽略縮小/放大。 – Arker

+0

是的,它忽略放大/縮小。我認爲這是你想要的。對不起,我沒有正確理解你的問題。 – Tomas