c++ - 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
您对如何将文本移动到设定位置有任何建议吗?
解决方案
来自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());
推荐阅读
- google-apps-script - Google 脚本可以从 Google Data Studio 中获取值吗?
- javascript - 如何在jquery中添加for循环
- python - 当 python 代码作为后台服务运行时,如何使用 asyncio.create_subprocess_exec 获取实时顶级命令输出?
- html - 为什么人们在巨大的文本墙中编写 html?
- ruby-on-rails - Ruby net::imap 为电子邮件添加颜色类别
- python - Django filter().first() 返回与 get() 不同的结果
- ruby-on-rails - Rails Active Admin 在显示页面上更新用户状态
- java - 从 jar 中的资源运行 SH 文件
- go - 使用没有 -linkshared 构建的二进制文件时不打印二进制地址
- python - 使用 SparkTrials 的 hyperopt 并行化