2016-03-11 49 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