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

    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
我尝试用另一种方式添加它,即创建并添加矩形到场景(此处称为“ newObject”)的方法,但是结果仍然相同。

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


我开始认为我应该将每个文本对象都创建为分离的对象,并将其保存为其他列表。当然,无论何时移动对象,我都必须对其进行更新。

最佳答案

尝试这个:

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

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

scene->addItem(gti);


QGraphicsItem::ItemIgnoresTransformations标志可防止在缩放视图(QGraphicsView)时缩放图形项目。

这意味着您需要一个单独的项目来呈现文本。但这可以是矩形项目的子项目。

关于c++ - Qt缩放带有未缩放文本的自定义QGraphicsItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35942223/

10-12 17:29