Взгляните на эти перегруженные методы, где вы должны указать ограничивающий прямоугольник после текстового параметра (который явно отличается от прямоугольника в позиции первого аргумента):
Рисует заданный текст внутри предоставленного прямоугольника в соответствии с указанными флагами. boundingRect (если не нуль) устанавливается на то, каким должен быть ограничивающий прямоугольник, чтобы заключить весь текст.
QPainter.drawText (1), QPainter.drawText (2)
Обновление:
Оказывается, если вы хотите заранее сгенерировать ограничивающий прямоугольник для метода drawText(), вы просто вызываете метод boundingRect() в QPainter, который делает следующее:
Возвращает ограничивающий прямоугольник текста, как он будет отображаться при рисовании внутри заданного прямоугольника с указанными флагами с использованием текущего установленного шрифта(); т. е. функция сообщает вам, где функция drawText() будет рисовать при наличии тех же аргументов.
Если текст не помещается в заданный прямоугольник с использованием указанных флагов, функция возвращает нужный прямоугольник.
QPainter.boundingRect
Я связался с BoundingRect с выводом QRectF, но информация применима и к другим версиям.
В общем, передайте результат QPainter.boundingRect() в параметр boundingRect метода QPainter.drawText() (второй аргумент QRect).
Обновление 2:
Я ИЗВИНЯЮСЬ за то, что был таким чертовски тупым. Я забыл, что drawText работает в PyQt иначе, чем в Qt. Ограничивающий прямоугольник ВОЗВРАЩАЕТСЯ функцией drawText (не передается, как Qt), и, кроме того, вы должны указать флаги выравнивания, прежде чем вы получите возвращаемый вам ограничивающий прямоугольник. (Я даже включил 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() при передаче флагов.
Это не похоже на идеальное поведение, так как вам придется самостоятельно устанавливать ограничивающий прямоугольник. Я надеюсь, что у кого-то еще есть ответ, который вы ищете, но я подозреваю, что вы можете сообщить об этой ошибке.
person
Community
schedule
27.04.2009