Qt Scaling自定义QGraphicsItem,带有未缩放的文本

时间:2016-03-11 14:02:24

标签: c++ qt text qgraphicsitem

我试图创建将使用ceratin文本(存储在属性中)在场景上绘制的customObject(矩形并且它继承自QGraphicsItem),但是当我缩放它时 - 我希望保持相同大小的文本。这是我的结束。绘画功能:

private final ActionListener orangeListener = e -> {
    rood=false;
    groen=false;
    oranje=true;
    new TimerTask(2000, redListener).start();
    repaint();
}

和我的两个缩放功能:

    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() );
    }

但是文字仍然与矩形一起缩放。

编辑1 我尝试用另一种方式添加它,我创建并添加我的矩形到场景(这里 - 命名为" newObject"),但结果仍然是相同的。

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

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

我开始认为我应该将每个文本对象创建为separeted对象并将其保存为不同的列表。 Ofcours,无论何时移动对象,我都必须更新它。

2 个答案:

答案 0 :(得分: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 )。

这意味着您需要一个用于渲染文本的分隔项。但它可以是矩形项目的子项目

答案 1 :(得分:0)

我用QGraphicsTextItem的poitner作为类的属性来解决这个问题。

QGraphicsTextItem* GTI;

我在构造函数中初始化它:

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();
}

然后我只是在更改位置时调用updateTextPosition()(在我的mouseRelease事件' s处理程序中)。