看看这些重载方法,您必须在 text 参数之后指定 Bounding Rectangle(这显然与第一个参数位置的矩形不同):
根据指定的标志在提供的矩形内绘制给定的文本。boundingRect(如果不为空)设置为边界矩形应该是什么,以便包含整个文本。
QPainter.drawText (1) , QPainter.drawText (2)
更新:
如果你想提前为 drawText() 方法生成一个边界矩形,你只需调用 QPainter 上的 boundingRect() 方法,它会执行以下操作:
返回文本的边界矩形,当它使用当前设置的 font() 绘制在具有指定标志的给定矩形内时,它将出现;即,该函数告诉您当给定相同的参数时,drawText() 函数将在哪里绘制。
如果文本不适合使用指定标志的给定矩形,则该函数返回所需的矩形。
QPainter.boundingRect
我使用 QRectF 输出链接到 BoundingRect,但该信息也适用于其他版本。
所以基本上,将 QPainter.boundingRect() 的结果传递给 QPainter.drawText() 方法的 boundingRect 参数(第二个 QRect 参数)。
更新 2:
我为自己如此该死的密集道歉。我忘记了 drawText 在 PyQt 中的工作方式与在 Qt 中不同。边界矩形由 drawText 函数返回(不像 Qt 那样传入),此外,您必须在获得返回给您的边界矩形之前指定对齐标志。(我什至根据 Aaron Digulla 的评论将 p.end() 包括在内):
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() 方法的输出返回给您。
这似乎不是理想的行为,您必须自己设置边界矩形。我希望其他人有你正在寻找的答案,但我怀疑你可能想报告这个错误。