Qt Scaling Custom QGraphicsItem with unscaled text

Posted

技术标签:

【中文标题】Qt Scaling Custom QGraphicsItem with unscaled text【英文标题】: 【发布时间】:2016-03-11 14:02:24 【问题描述】:

我正在尝试创建 customObject(矩形,它继承自 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 我尝试以另一种方式添加它,即创建矩形并将其添加到场景中(此处 - 名为“newObject”),但结果仍然相同。

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

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

【问题讨论】:

【参考方案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)。

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

【讨论】:

效果不如我预期。它忽略了正确向上/向下缩放其父对象,但也忽略了缩小/缩小。 是的,它忽略放大/缩小。我以为这就是你想要的。抱歉,我没有正确理解您的问题。【参考方案2】:

我用 QGraphicsTextItem 的指针作为类的属性解决了这个问题。

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

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

【讨论】:

以上是关于Qt Scaling Custom QGraphicsItem with unscaled text的主要内容,如果未能解决你的问题,请参考以下文章

电路中的chip scaling指的是啥?

R数据缩放值标准缩放(standardization scaling)以及最小最大缩放(Min-Max scaling)

AWS Beanstalk Auto-scaling Scaling Triggers with HealthyHostCount 或 UnhealthyHost count

包括 Scaling 和 PCA 作为 GridSearchCV 的参数

Auto-Scaling 组不会在启动配置更改时更新

Amazon EC2、Auto-Scaling、AMI,有没有更简单的方法?