qpainter drawText文字方向和大小
qpainter drawText text direction and size
我有一双 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()
好的,所以我找到了适用于 "rotated" 文本的解决方案。我不得不在绘制文本之前重新缩放画家并实际将其绘制在翻译后的位置:
所以 for 循环看起来像这样:
for k, text in enumerate(xlabels):
painter.save()
painter.scale(1,-1)
painter.drawText(myxrange[k], -myyrange[0], text)
painter.restore()
我仍在寻找固定大小问题的答案。
我有一双 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()
好的,所以我找到了适用于 "rotated" 文本的解决方案。我不得不在绘制文本之前重新缩放画家并实际将其绘制在翻译后的位置:
所以 for 循环看起来像这样:
for k, text in enumerate(xlabels):
painter.save()
painter.scale(1,-1)
painter.drawText(myxrange[k], -myyrange[0], text)
painter.restore()
我仍在寻找固定大小问题的答案。