绘制上的 QPicture 应当更新其边界rect.是这样的:

>>> picture = QPicture()
>>> painter = QPainter(picture)
>>> picture.boundingRect()
QRect(0,0,0,0)
>>> painter.drawRect(20,20,50,50)
>>> picture.boundingRect()
QRect(20,20,50,50)

但是,如果我的画上它的文本,边界rect不是更新:

>>> picture = QPicture()
>>> painter = QPainter(picture)
>>> picture.boundingRect()
QRect(0,0,0,0)
>>> painter.drawText(10,10, "Hello, World!")
>>> picture.boundingRect()
QRect(0,0,0,0)

显然,它没有更新的边界rect.

有没有办法让它repsect绘制的案文或做我必须做这手?(不要太辛苦,但我希望脱可以协助我在这里.)

有帮助吗?

解决方案

看看这些超载方法,在这里你必须在指定的边界矩形后文本参数(其显然不同于的矩形,在第一个参数的位置):

绘制定文本内 提供根据矩形 指定的标志。该boundingRect(如果 不null)设置到什么 bounding rectangle应该可以 附上整个文本。

QPainter.drawText(1), QPainter.drawText(2)

更新:

看如果你想要产生一边框drawText()方法在前,你只叫boundingRect()方法QPainter,这并如下:

返回的边界矩形的 文本,因为它会出现的时候画的 内给予的矩形 指定的标志使用的当前 设置的字体();i。e功能告诉你 在drawText()function会 画画的时候给予相同的论点。

如果该案文不适合的 鉴于使用指定的矩形 标志,该功能将返回 所需要的矩形。

QPainter.boundingRect

我相联系BoundingRect与QRectF输出,但该信息适用于其他版本。

所以基本上,将结果传递的QPainter.boundingRect()进入boundingRect参数的QPainter.drawText()法(第二QRect个参数)。

更新2:

我表示歉意大汗正在这样该死的密集。我忘了,drawText的工作方式不同,在PyQt于在夸脱边框返回的drawText功能(不过,在像脱),并除此之外,你必须对准的标志在你的一边框给回到你。(I甚至包括p.end()为每Aaron Digulla的评论):

pic = Qt.QPicture()
p = QtGui.QPainter(pic)
brect = p.drawText(10,10,200,200, QtCore.Qt.AlignCenter, "blah")
p.end()
print brect
print pic.boundingRect()

这里是输出:

PyQt4.QtCore.QRect(100号、103号、20日、14)

PyQt4.QtCore.QRect(0,0,0,0)

所以它的出现,你会必须设置边框自己,虽然它至少是返回到你的输出drawText()方法时,通过在标志。

这似乎并不像想的行为,那你就得设定的边框自己。我希望其他人已经回答你在寻找的,但我怀疑你可以报告这一错误。

其他提示

绘画不会改变 Qt 中物体的大小。主要原因是这样的:

  • 组件必须自行绘制
  • 油漆触发调整大小
  • 调整大小触发绘画 -> 无限循环

因此调整大小必须在布局阶段进行。此后,界限不应改变。

要解决您的问题,请使用 QFontMetric 计算出在构建图片期间或接近构建图片时文本的大小,然后相应地调整其大小。

[编辑] 嗯...在请求边界矩形之前尝试调用 end()。如果有效,您就发现了一个错误(看不到添加元素时边界矩形不应该存在的原因......)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top