有没有办法让drawText()更新QPicture的边界矩形?
在QPicture
上绘图应更新其边界矩形。就像这样:有没有办法让drawText()更新QPicture的边界矩形?
>>> 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)
显然,它不更新的边界矩形。
有没有办法让它解除绘制文本,或者我必须手动执行它? (不是太难,但我希望Qt可以帮助我。)
看看这些重载方法,你必须指定Bounding text参数后矩形(这是比在第一个参数的位置的矩形明显不同):
绘制根据 指定的标志设置矩形 内给定的文本。 boundingRect(如果 非空)设置为 边界矩形按顺序 包围整个文本。
QPainter.drawText (1),QPainter.drawText (2)
更新:
,如果你想生成提前为的drawText外接矩形()方法,它的出现,你只需要调用boundingRect()上QPainter的方法,它执行以下操作:
返回 文本的边界矩形,因为它会出现wh在给定矩形内绘制 ,使用 设置字体(); 指定标志。即该函数告诉您 在给定相同参数时drawText()函数将在哪里绘制 。
如果文本中不使用指定的 标志的 定矩形内适合,该函数返回 所需的矩形。
我联系与QRectF输出BoundingRect,但信息适用于其他的版本。
所以基本上,将QPainter.boundingRect()的结果传递给QPainter.drawText()方法(第二个QRect参数)的boundingRect参数。
更新2:
我道歉大汗了这么该死的密集。我忘记了DrawText在PyQt中的工作方式与Qt中的不同。边界矩形由drawText函数返回(不像Qt中传入),此外,在返回给定边界矩形之前,必须指定对齐标志。 (I甚至包括在p.end(),按照亚伦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的输出返回给你()方法时,passi在旗帜中。
这看起来不像理想的行为,你必须自己设置边界矩形。我希望别人有你正在寻找的答案,但我怀疑你可能想报告这个错误。
绘画不会改变Qt中的东西的大小。主要的原因是这样的:
- 的组件具有自身油漆
- 油漆触发调整大小
- 容量调整触发画 - >无限循环
所以调整大小有期间发生布局阶段。之后,边界不应该改变。
为了解决您的问题,请使用QFontMetric来计算您的文本在构建图片期间或接近构图时的大小,然后相应调整其大小。
[编辑] Hm ...尝试在请求边界矩形之前调用end()。如果这样,你会发现一个bug(看不到添加元素时边界矩不存在的原因)
您使用的是什么版本的PyQt?在4.3和更高版本中,drawText不是QPicture上的方法。 – 2009-04-27 12:46:10
我的意思是painter.drawText()在那里,对不起。我正在使用Qt 4.4。 (由PyQt支持的最新版本) – 2009-04-27 12:49:22
好的,看我的答案,它可能是你正在寻找的。 – 2009-04-27 12:51:26