qpainter drawText 文本方向和大小

Posted

技术标签:

【中文标题】qpainter drawText 文本方向和大小【英文标题】:qpainter drawText text direction and size 【发布时间】:2017-07-03 18:24:00 【问题描述】:

我有一个 QGraphicsView/QGraphicsScene 对。我已经覆盖了 QGraphicsView.drawBackgroud 方法以绘制一个矩形网格。在那之前一切都很好,但是当我尝试使用 QPainter.drawText 方法绘制实际坐标时,生成的文本是颠倒的。另一个问题是我不希望坐标值的文本通过缩放来调整大小,但我无法实现这一点。

我的视图最初是按比例缩放的 (1,-1)。

我正在研究 PySide

这是我的 drawBackground 代码:

pen = QtGui.QPen(QtGui.QColor(0,0,0))
painter.setPen(pen)
gridInterval = 10
#painter.setWorldMatrixEnabled(True)

l, r = rect.left(), rect.right()
t, b = rect.bottom(), rect.top()

dx = (r - l) / gridInterval
dy = (t - b) / gridInterval 
left = int(l) + dx / 2
bottom = int(b) + dy / 2
nx = gridInterval
ny = gridInterval
dx = (r - l) / gridInterval
dy = (t - b) / gridInterval 
myxrange = [left + i * dx for i in range(nx)]
myyrange = [bottom + j * dy for j in range(ny)]

xlabels = ["0:.2f".format(x) for x in myxrange]
ylabels = ["0:.2f".format(y) for y in myyrange]

xlines = []
for point in myxrange:
    line = QtCore.QLineF(point, t, point, b)
    xlines.append(line)

ylines = []
for point in myyrange:
    line = QtCore.QLineF(l, point, r, point)
    ylines.append(line)

painter.drawLines(xlines)
painter.drawLines(ylines)

#font = QtGui.QFont()
#font.setPointSize(20)
#painter.setFont(font)

for k, text in enumerate(xlabels):
    #painter.save()
    #painter.rotate(90)
    painter.drawText(myxrange[k], myyrange[0], text)
    #painter.rotate(-90)
    #painter.restore()

【问题讨论】:

【参考方案1】:

好的,所以我找到了一个适用于“旋转”文本的解决方案。我必须在绘制文本之前重新调整画家的比例,并在翻译后的位置实际绘制它:

所以 for 循环看起来像这样:

for k, text in enumerate(xlabels):
    painter.save()
    painter.scale(1,-1)
    painter.drawText(myxrange[k], -myyrange[0], text)
    painter.restore()

我仍在寻找固定尺寸问题的答案。

【讨论】:

以上是关于qpainter drawText 文本方向和大小的主要内容,如果未能解决你的问题,请参考以下文章

如何销毁 QPainter 对象/摆脱 drawText() 内存泄漏?

初始化数据库中的 QPainter#drawText 段错误

如何使 drawText() 准确定位?

第70课 文本绘制技巧

自定义控件详解:drawText()

如何使用 QPainter 缩放文本以适合边界框?