首页 > 解决方案 > QGraphicsTextItem 不改变位置

问题描述

我尝试QGraphicsTextItem在定义的位置添加文本,但文本始终位于 QGraphicsWidget 的左上角。这是简单的代码:

QGraphicsTextItem* textItem= new QGraphicsTextItem(QString::number(i));
            textItem->setFont(QFont("Helvetica", 12));
            textItem->setTextWidth(50);
            textItem->setDefaultTextColor(QColor(255, 255, 255));
            textItem->setPos(QPoint(300,300)));

然后我读到它QGraphicsTextItem有它自己的boundingBox,也许边界框有leftTop(0,0)。这就是我尝试更改边界框坐标的原因:

textItem->boundingRect().setWidth(50);
            textItem->boundingRect().setHeight(50);
            textItem->boundingRect().setTopLeft(QPoint(100,100));

但是当我boundingBox在这些更改之后打印尺寸和 topLeft 坐标时,总是相同的:

textItem->boundingRect();
                std::cout << textItem.topLeft().x() << std::endl;
                std::cout << textItem.topLeft().y() << std::endl;
                std::cout << textItem.height() << std::endl;
                std::cout << textItem.width() << std::endl;

结果:

0
0
32
50

您对如何将文本移动到设定位置有任何建议吗?

标签: c++qt

解决方案


来自QGraphicsView文档:

QGraphicsView 可用于可视化整个场景或仅部分场景。默认情况下,第一次显示视图时会自动检测到可视化区域(通过调用 QGraphicsScene::itemsBoundingRect())。要自己设置可视化区域矩形,可以调用 setSceneRect()。

 auto scene = new QGraphicsScene(this);
    scene->setSceneRect(0,0,width(),height());
    ui->graphicsView->setScene(scene);
    QGraphicsTextItem* textItem= new QGraphicsTextItem(QString::number(1234));
                textItem->setFont(QFont("Helvetica", 12));
                textItem->setTextWidth(50);
                textItem->setDefaultTextColor(QColor(0, 0, 0));
                textItem->setPos(QPoint(100,300));

      scene->addItem(textItem);

在此处输入图像描述

我在主窗口 UI 中添加一个 QGraphicsView 项,然后在主窗口的构造函数中创建一个场景,然后像这样setSceneRect 很重要scene->setSceneRect(0,0,width(),height());


推荐阅读