2
我正在Qt中使用QPainter繪製QWidget的新項目。 問題是,當我嘗試旋轉QPainter時,我想繪製的文本旋轉出我的QWidget。 我知道如何解決一般的問題,但不知何故,直到現在我都弄不明白。 我必須翻譯我的QPainter,以便將我的文本正確放置在旋轉中,但是我不知道如何將該點指定到我應該翻譯我的座標系的位置。 我沒有翻譯代碼: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();
但它仍然旋轉我的繪圖區域。 任何想法?
感謝您的回答。從邏輯上講,我認爲這也應該是正確的,當我只在沒有輪換的情況下翻譯時,我發現它運行良好,(文本從中心移到右下角),但是當我添加旋轉時,文本仍然繪製在外。請參閱上面的編輯。 – Flashcap20
那麼,你是否在旋轉之後嘗試翻譯回來? – ypnos
噢..對不起,:)我認爲painter.restore()會爲我做。最後一個問題。看起來在旋轉boundingRect縮小之後,文本太長了,最後一個字符的一半都沒有了。這是爲什麼? – Flashcap20