我试图创建将使用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,无论何时移动对象,我都必须更新它。
答案 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处理程序中)。