qt绘制rect以左上角为旋转中心,绘制文字是以左下角为旋转中心,
windows绘制rect和文字,都以左上角为旋转中心
为了都能实现坐标旋转,按下面代码处理,撸了一段代码,随意转。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qpainter.h"
#include <qrect.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
int iFontSize=30;
QFont font("微软雅黑",iFontSize);
font.setLetterSpacing(QFont::PercentageSpacing,0);
font.setLetterSpacing(QFont::AbsoluteSpacing,0);
QPoint ptCenter(100,100);
QRect rt(0,0,100,100);
QString strText("汉字");
QFontMetrics fm(font);
//QRect rtText = fm.boundingRect(strText);
int w=fm.width(strText);
int h=fm.height();
QRect rtText(0,0,w,h);
painter.setFont(font);
painter.save();
painter.translate(ptCenter);
painter.rotate(45);
painter.fillRect(rt,QBrush(Qt::blue));
int x=0;
int y=0;
//painter.fillRect(x,y,rtText.width(),rtText.height(),QBrush(Qt::green));
painter.fillRect(rtText,QBrush(Qt::green));
painter.drawText(x,y+h-iFontSize/3.,"汉字");//文字大小/3为了除掉qt 绘制字体 上下空白间隙
painter.restore();
QPen mypen;
mypen.setWidth(5);
mypen.setColor(Qt::black);
painter.setPen(mypen);
painter.drawPoint(ptCenter);//旋转参考点
}