我正在Qt中开展一个新项目,使用QPainter绘制QWidget。 问题是,当我尝试旋转QPainter时,我要绘制的文本将从我的QWidget中旋转出来。 我知道如何解决这个问题一般,但不知怎的,直到现在我都无法解决这个问题。 我必须翻译我的QPainter,以便将我的文本定位为旋转,但我不知道如何指定我应该翻译我的坐标系的位置。 我的代码没有翻译:
QPainter painter;
float width = 40;
float height = 200;
float rangeMin = 0;
float rangeMax = 100;
float progress = 80;
QString format("%1/%2");
int alignmentHorizontal = Qt::AlignHCenter;
int alignmentVertical = Qt::AlignVCenter;
int fontSize = 12;
QColor backgroundColor = Qt::green;
QColor fontColor = Qt::black;
QFont font("Arial", fontSize);
QBrush backgroundBrush(backgroundColor);
QBrush transparentBrush(QColor(0,0,0,0));
QRect boundingRect = QRect(0, 0, width, height);
painter.begin(this);
painter.setFont(font);
painter.setPen(fontColor);
painter.drawRect(boundingRect);
float rectX = 0;
float rectY = 0;
float rectWidth = width;
float rectHeight = (float)height/(qAbs(rangeMin)+rangeMax)*progress;
int textRotation = 90;
painter.setBrush(backgroundBrush);
QRectF rect = QRectF(rectX, rectY, rectWidth, rectHeight);
painter.drawRect(rect);
//This is the text I want to rotate, while keeping it centerd horizontally and vertically in boundingRect.
//painter.translate(x, y);
painter.rotate(textRotation);
painter.drawText(boundingRect, alignmentHorizontal | alignmentVertical, QString(format).arg(progress).arg(rangeMax));
painter.end();
请您解释一下如何计算我需要的那个点?
感谢您的帮助! :)
编辑:
我编辑了这样的代码:
painter.save();
painter.translate(width/2, height/2);
painter.rotate(textRotation);
painter.drawText(boundingRect, alignmentHorizontal | alignmentVertical, QString(format).arg(progress).arg(rangeMax));
painter.restore();
但它仍然在我的绘图区域外旋转。 有什么想法吗?
答案 0 :(得分:1)
将画家翻译到绘图区域的中心(在您的情况下,是boundingRect&宽度/高度的1/2)。然后旋转将相对于中心完成,文本将不会旋转出来。