我试图创建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/